【发布时间】:2020-10-20 23:36:21
【问题描述】:
我在 VSCode IDE 中使用 JVM 14.0.2。 该代码的目的是将原始输入图像更改为灰度图像,并将新的灰度图像保存到所需位置。
代码无异常运行,我尝试打印一些进度行(System.out.println("Saving completed...");),这些行打印在我插入的整个程序中。但是,当我转到选定的文件路径搜索保存的灰度图像,我在目录中没有看到新图像。
然后我尝试了 BlueJ IDE,并保存了灰色图像。你能检查一下是 VSCode 开发环境问题还是我的代码问题?或者我需要不同的类/方法来编辑 VSCode 中的图像?感谢您的帮助。如果您需要更多详细信息,请告诉我。
public class GrayImage {
public static void main(String args[]) throws IOException {
BufferedImage img = null;
// read image
try {
File f = new File("C:\\original.jpg");
img = ImageIO.read(f);
// get image width and height
int width = img.getWidth();
int height = img.getHeight();
BufferedImage grayimg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
// convert to grayscale
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
Color color = new Color(img.getRGB(x, y));
int r = (int) color.getRed();
int g = (int) color.getBlue();
int b = (int) color.getGreen();
// calculate average
int avg = (r + g + b) / 3;
// replace RGB value with avg
Color newColor = new Color(avg, avg, avg, color.getAlpha());
grayimg.setRGB(x, y, newColor.getRGB());
}
}
// write image
System.out.println("Trying to write the new image...");
File newf = new File("H:\\gray.jpg");
ImageIO.write(grayimg, "jpg", newf);
System.out.println("Finished writing the new image...");
} catch (IOException e) {
System.out.println(e);
}
}// main() ends here
}
【问题讨论】:
-
您的代码看起来不错(尽管,可能不是转换为灰色的最有效/“正确”的方式)。它在另一个 IDE 中工作的事实也表明它很好。可能,您(您的 IDE)正在使用不同的 JRE,其中一个无法存储 ARGB JPEG。我相信
ImageIO.write(...)会从 VSCode 返回false,但会从 BlueJ 返回true。不过你不需要 ARGB,所以我认为将grayImg更改为TYPE_INT_RGB,或者更好,TYPE_BYTE_GRAY将解决它。
标签: java visual-studio-code vscode-settings javax.imageio grayscale