Обработка изображений в Java — создание зеркального изображения

Опубликовано: 15 Сентября, 2022

Условие:

  • Обработка изображений в Java — чтение и запись
  • Обработка изображений в Java — получение и установка пикселей
  • Обработка изображений в Java — преобразование цветного изображения в изображение в градациях серого
  • Обработка изображений в Java — преобразование цветного изображения в негативное изображение
  • Обработка изображений в Java — преобразование цветных изображений в красные, зеленые, синие
  • Обработка изображений в Java — преобразование цветного изображения в изображение сепии
  • Обработка изображений в Java — создание случайного пиксельного изображения

В этом наборе мы будем создавать зеркальное отражение. Изображение предмета, увиденного в зеркале, есть его зеркальное отражение или зеркальное отображение. На таком изображении правая сторона объекта появляется слева и наоборот. Поэтому говорят, что зеркальное отражение перевернуто вбок, а явление называется боковой инверсией. Основная хитрость заключается в том, чтобы получить исходные значения пикселей слева направо и установить их в результирующем изображении справа налево.

Алгоритм:

  1. Прочитайте исходное изображение в BufferedImage, чтобы прочитать данное изображение.
  2. Получить размеры данного изображения.
  3. Создайте еще один объект BufferedImage того же размера для хранения зеркального изображения.
  4. Получите значения ARGB (альфа, красный, зеленый и синий) из исходного изображения [слева направо].
  5. Установите ARGB (альфа, красный, зеленый и синий) для вновь созданного изображения [справа налево].
  6. Повторите шаги 4 и 5 для каждого пикселя изображения.

Реализация:

Java




// Java program to demonstrate
// creation of a mirror image
  
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
  
public class MirrorImage {
    public static void main(String args[])
        throws IOException
    {
        // BufferedImage for source image
        BufferedImage simg = null;
  
        // File object
        File f = null;
  
        // Read source image file
        try {
            f = new File(
                "C:/Users/hp/Desktop/Image Processing in Java/gfg-logo.png");
            simg = ImageIO.read(f);
        }
  
        catch (IOException e) {
            System.out.println("Error: " + e);
        }
  
        // Get source image dimension
        int width = simg.getWidth();
        int height = simg.getHeight();
  
        // BufferedImage for mirror image
        BufferedImage mimg = new BufferedImage(
            width, height, BufferedImage.TYPE_INT_ARGB);
  
        // Create mirror image pixel by pixel
        for (int y = 0; y < height; y++) {
            for (int lx = 0, rx = width - 1; lx < width; lx++, rx--) {
                  
                  // lx starts from the left side of the image
                // rx starts from the right side of the
                // image lx is used since we are getting
                // pixel from left side rx is used to set
                // from right side get source pixel value
                int p = simg.getRGB(lx, y);
  
                // set mirror image pixel value
                mimg.setRGB(rx, y, p);
            }
        }
  
        // save mirror image
        try {
            f = new File(
                "C:/Users/hp/Desktop/Image Processing in Java/GFG.png");
            ImageIO.write(mimg, "png", f);
        }
        catch (IOException e) {
            System.out.println("Error: " + e);
        }
    }
}

Выход:

Note: This code will not run on online ide since it requires an image in the drive.

Эта статья предоставлена Pratik Agarwal . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью с помощью write.geeksforgeeks.org или отправить ее по адресу review-team@geeksforgeeks.org. Посмотрите, как ваша статья появится на главной странице GeeksforGeeks, и помогите другим гикам. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или хотите поделиться дополнительной информацией по теме, обсуждаемой выше.