Вот как бы я делал в Java:
Итерация по всем пикселям двух изображений одновременно. (для цикла (x) внутри цикла for (y)). Конечно, используйте BufferedImage
. Вы можете получить цвет пикселя, выполнив:
int color = img.getRGB(x, y);
Сделайте то же самое для другого изображения и выполните операцию xor для двух цветов. Сохраните полученное значение в новом BufferedImage с теми же размерами, что и у двух входных изображений.
Вот пример кода:
public static BufferedImage xorEffect(BufferedImage imageA, BufferedImage imageB) {
if (imageA.getWidth() != imageB.getWidth() ||
imageA.getHeight() != imageB.getHeight())
{
throw new IllegalArgumentException("Dimensions are not the same!");
}
BufferedImage img = new BufferedImage(imageA.getWidth(),
imageA.getHeight(),
BufferedImage.TYPE_INT_ARGB_PRE);
for (int y = 0; y < imageA.getHeight(); ++y) {
for (int x = 0; x < imageA.getWidth(); ++x) {
int pixelA = imageA.getRGB(x, y);
int pixelB = imageB.getRGB(x, y);
int pixelXOR = pixelA ^ pixelB;
img.setRGB(x, y, pixelXOR);
}
}
return img;
}
Чтобы загрузить изображение из файла, используйте:
BufferedImage imageA = ImageIO.read(new File("/home/username/image.png"));