#java #image-processing
Вопрос:
[![Редактировать: я добавил фотографию ошибки, которую получаю.][1]][1]Я все еще очень новичок в программировании, и я столкнулся с проблемой с кодом, с которым, я надеюсь, кто-нибудь сможет мне помочь. Я нашел приведенный ниже java-код для наложения и сравнения пикселей двух изображений на онлайн-форуме. Когда я пытаюсь скомпилировать код, я получаю синтаксическую ошибку. Надеюсь, вы сможете помочь мне найти ошибку. Заранее спасибо.
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()
amp;amp; 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();
}
}
}
[1]: https://i.stack.imgur.com/OYdeO.png
Комментарии:
1. Это работает на меня. На самом деле, это очень элегантный и хорошо написанный класс, он отлично работает. Какие ошибки вы получаете?
2. Ваша проблема может заключаться в том , что
PictureOverlayTest
код должен быть помещен в другой файл класса java с именемPictureOverlayTest
, аMain
часть кода должна быть помещена в файл класса с именемMain
, и оба файла должны находиться в пакете с именемstackexchange
. Если это не так, то вам нужно будет изменить код, чтобы он был нацелен на правильный пакет и имел имя класса.3. @davidalayachew, код вообще не компилируется, в нем просто говорится о синтаксической ошибке. Как уже говорилось, я все еще новичок, и я знаю, что это, вероятно, небольшая вещь, которую следует изменить, но я просто не могу понять это.
4. Вот какие ошибки кода я получаю: postimg.cc/gallery/fJZW2k5
5. @Рабитаха, я вижу. Я согласен с sorifiendом — я бы сначала попытался разделить 2 класса java на 2 отдельных файла вместо одного большого — хорошими именами могут быть «PictureOverlayTest» и «Main». Затем нажмите ctrl f на этом символе —> ‘ > Давайте посмотрим, поможет ли это.