Expand|Select|Wrap|Line Numbers
- package stackexchange;
- import java.awt.Color;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.IOException;
- import javax.imageio.ImageIO;
- public class PictureOverlayTest {
- /*
- * Four variables, three for the wanted BufferedImages, one String for the
- * Path of the third Image, which does not already exist.
- */`
- private BufferedImage image1;
- private BufferedImage image2;
- private BufferedImage image3;
- private String pathImage3;
- public PictureOverlayTest(String filePathAndName1, String filePathAndName2,
- String filePathAndName3) throws IOException {
- /*
- * Constructor in order to keep this method reusable and clean. Needs
- * three Strings. The paths and Filenames of all three images. Image 1
- * and 2 should exist already, Image 3 will be created if all
- * requirements are met. Constructor creates the first two buffered
- * images, sets all needed variables and starts the checkAndCompare()
- * method
- */
- File file = new File(filePathAndName1);
- this.image1 = ImageIO.read(file);
- file = new File(filePathAndName2);
- this.image2 = ImageIO.read(file);
- this.pathImage3 = filePathAndName3;
- checkAndCompare();
- }
- private void checkAndCompare() throws IOException {
- /*
- * This function creates the Color blue, compares the sizes of both
- * pictures and if they are the same, creates a third image. Then it
- * loops through the two images and compares each pixel. If the pixels
- * are the same, the third image gets a blue pixel at that point
- */
- Color blue = Color.blue;
- if (image1.getHeight() == image2.getHeight()
- && image1.getWidth() == image2.getWidth()) {
- image3 = new BufferedImage(image1.getWidth(), image1.getHeight(),
- image1.getType());
- for (int y = 0; y < image1.getHeight(); y++) {
- for (int x = 0; x < image1.getWidth(); x++) {
- int colorImage1 = image1.getRGB(x, y);
- int colorImage2 = image2.getRGB(x, y);
- if (colorImage1 == colorImage2) {
- image3.setRGB(x, y, blue.getRGB());
- } else {
- // Whatever Color you want. By default it is black.
- }
- }
- }
- savePicture3();
- System.out.println("Message: Image comparison is done");
- } else {
- System.out.println("Error: Image dimensions do not match");
- }
- }
- private void savePicture3() throws IOException {
- /*
- * This method saves the created Image into a file onto your computer.
- * The if() statement is used to check if the file was successfully
- * created, in order to avoid unwanted errors. Keep in mind, that you
- * have to change the "bmp" in ImageIO.write() to whatever format you
- * actually want
- */
- File file = new File(pathImage3);
- if (file.createNewFile()) {
- ImageIO.write(image3, "bmp", file);
- }
- }
- }
- package stackexchange;
- import java.io.IOException;
- public class Main {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- try {
- PictureOverlayTest test = new PictureOverlayTest(
- "H:\\stackexchange\\file1.bmp",
- "H:\\stackexchange\\file2.bmp",
- "H:\\stackexchange\\file3.bmp");
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }