در این قسمت تیم کدگیت را با آموزش ساخت تصویر معکوس در جاوا همراهی کنید. در آموزشهای گذشته پردازش تصویر، مبانی خواندن و نوشتن یک عکس در جاوا و بهبود آنها بیان شد در این قسمت ابتدا الگوریتم ساخت تصویر معکوس در جاوا را تشریح میکنیم سپس به پیادهسازی این الگوریتم میپردازیم. همچنین پیشنهاد میکنیم قبل از مطالعه این جلسه، آموزشهای زیر را مطالعه کنید:
ساخت تصویر معکوس در جاوا
در این بخش ما به ایجاد کردن یک تصویر معکوس میپردازیم. اصلیترین حرکت برای این کار این است که مقادیر پیکسل را از چپ به راست از تصویر اصلی برداریم و از راست به چپ در تصویر ثانویه قرار دهیم. الگوریتم این روش به صورت زیر است:
- برای خواندن تصویر ثانویه لازم است تصویر اولیه را در BufferedImage بخوانید.
- ابعاد تصویر ثانویه را بدست آورید.
- برای نگه داشتن (ذخیره کردن) تصویر معکوس، BufferedImage دیگری با همان ابعاد ایجاد کنید.
- مقادیر (ARGB (Alpha, Red, Green and Blue، را از تصویر اولیه (به ترتیب چپ به راست) بدست اورید.
- در تصویر تازه ایجاد شده (به ترتیب راست به چپ) ، (ARGB (Alpha, Red, Green and Blue آنها را قرار دهید.
- مراحل 4 و5 را برای هریک از پیکسل های تصویر تکرار کنید.
پیادهسازی ساخت تصویر معکوس در جاوا
همانطور که در قسمت قبل گفته شد برای پیاده سازی تصویر معکوس، پیکسلهای تصویری را از چپ به راست خوانده و در تصویر جدیدی از راست به چپ میریزیم. برای پیاده سازی دو متغیر lx و rx را در نظر میگیریم. Lx اشارهگر به پیکسلهای تصویر اصلی است و rx اشارهگر به تصویر معکوس ما.
ابتدا lx عدد صفر و rx به اندازه عرض تصویر ما است. با حرکت lx به سمت راست(خواندن تصویر اصلی) یکی از rx کم میشود. دقت کنید به ازای حرکت یک پیکسل به lx یکی اضافه میشود و از rx کم میشود. کد پیادهسازی این الگوریتم به صورت زیر است:
public class MirrorImage {
public static void main(String args[]) throws IOException {
// BufferedImage for source image
BufferedImage simg = null;
File f = null;
try {
f = new File("mirrorInput.jpg");
simg = ImageIO.read(f);
}
catch (IOException e) {
System.out.println("Error: " + e);
}
int width = simg.getWidth();
int height = simg.getHeight();
// BufferedImage for mirror image
BufferedImage mimg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// Create mirror image pixel by pixel
for (int y = 0; y < height; y++) {
for (int lx = 0, rx = width - 1; lx < width; lx++, rx--) {
int p = simg.getRGB(lx, y);
Color col = new Color(simg.getRGB(lx, y));
mimg.setRGB(rx, y, col.getRGB());
}
}
try {
f = new File("mirroroutput.jpg");
ImageIO.write(mimg, "jpg", f);
System.out.println("Finish!");
} catch (IOException e) {
System.out.println("Error: " + e);
}
}
}
ورودی کد بالا به صورت زیر است:

خروجی برنامه به صورت زیر است:
