در این قسمت تیم کدگیت را با آموزش دریافت پیکسلهای تصویر در جاوا همراهی کنید. ابتدا در این جلسه به کمک کتابخانه imageIO یک تصویر را خوانده و سپس با کمک کلاس BufferedImage پیکسلهای آن را دریافت میکنیم. پیشنهاد میکنیم قبل از مطالعه این جلسه، آموزشهای ذیل را مطالعه نمایید:
پیکسل چیست؟
در تصاویر دیجیتالی پیکسل را کوچکترین جزء ساختاری یک تصویر میگویند. هر پیکسل در واقع یک نقطه روی صفحه نمایش است. پیکسل ها قسمت های اصلی یک تصویر هستند که آن را به وجود میآورند و طرز کار و عملکرد آن ها بر اساس مختصات است. پیکسل ها میتوانند کیفیت و ابعاد مختلفی داشته باشند و یا حتی ترکیب بندی آن ها متفاوت باشد که این موضوع با توجه به نوع کارت گرافیک و مانیتور سیستم تغییر میکند.
![دریافت پیکسلهای تصویر در جاوا](http://codegate.ir/wp-content/uploads/2021/10/Getting-Image-Pixel-in-Java-image-1-www.codegate.ir_.jpg)
دریافت پیکسلهای تصویر در جاوا
در گام اول ما باید یک تصویر را بخوانیم. به کمک کد زیر تصویر baboon.png را میخوانیم.
BufferedImage image =
ImageIO.read(new File("baboon.png"));
حال که تصویر را خواندیم میبایست پیکسلهای آن را دریافت کنیم. تصاویر از سه رنگ RGB (قرمز، سبز، آبی)تشکیل شده اند هر کدام به صورت جداگانه میبایست دریافت شوند. در این آموزش ما سه رنگ را دریافت و تنها رنگ قرمز تصویر را چاپ میکنیم. برای دریافت پیکسل ابتدا به کمک حلقه for چرخشی بر روی عرض و ارتفاع تصویر انجام میدهیم (همانطور که در تصویر فوق دیدید مقدار پیکسلها مانند آرایه دو بعدی هستند). کد این چرخش به صورت زیر است:
for (int i = 0; i < image.getHeight(); i++) {
for (int j = 0; j < image.getWidth(); j++) {
}
}
در حلقه اول چرخش ما بر روی ارتفاع و در حلقه دوم چرخش ما بر روی عرض تصویر است. خب حالا نوبت به دریافت پیکسل است. کد زیر پیکسل تصویر ما را دریافت میکند:
int color = image.getRGB(i, j);
Color rgb = new Color(color);
متد getRGB پیکسل تصویر را برای ما بر میگرداند. البته باید این را گفت که در صورت چاپ خروجی این متد یک عدد بی معنی چاپ میشود چراکه در یک مقدار int سه مقدار RGB ذخیره سازی شده است(در ویدئو آموزش این جلسه به صورت کامل این مسئله را توضیح دادیم). در کد بالا از کلاس Color برای جداسازی رنگها کمک گرفتیم.
اجرای برنامه
در پایان تمام کد را کنار هم قرار داده و آن را اجرا میکنیم:
public static void main(String[] args) {
try {
BufferedImage image =
ImageIO.read(new File("baboon.png"));
for (int i = 0; i < image.getHeight(); i++) {
for (int j = 0; j < image.getWidth(); j++) {
int color = image.getRGB(i, j);
Color rgb = new Color(color);
System.out.print(rgb.getRed() + " ");
}
System.out.println();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
در خروجی بالا ما تنها رنگ قرمز همه پیکسلها تصویر خود را چاپ کردیم. شما میتوانید مابقی رنگها (آبی و سبز) را نیز به همین صورت چاپ کنید. قسمتی از خروجی کد بالا به صورت زیر میباشد:
141 136 87 91 64 139 202 107 169
179 120 96 62 80 168 166 134 119
اگر سوالی در خصوص این جلسه دارید در قسمت کامنت سوال خود را مطرح کنید تا پاسخگوی شما باشیم.