【发布时间】:2021-12-26 14:51:23
【问题描述】:
我需要做的是我有一个输入图像文件,我需要将其更改为用户的参数。例如,如果用户想让它变暗 %30,首先我获取所有像素及其 RGB 值并将它们存储在 2D 数组中。下面给出了示例数组。
114 121 140 //Pixel 1
114 121 140 //Pixel 2
114 121 140 //Pixel 3
.
.
.
50 57 83 //Pixel 2073601
之后,我会覆盖 RGB 值(在我们的例子中,如果 RGB 值为 10:10:10,则新值将为 7:7:7)。从那时起,一切都很好。但是现在我在使用新的信息数组创建 output.jpg 文件时遇到了一些困难。当我运行我的函数时,它不会创建任何 output.jpg 文件。这是我的功能。
public static void createFinalImage(int height, int width, String[][] rgbArray, String outputFile) {
BufferedImage img;
img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
File f;
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
String[] data = rgbArray[y][x].split(" ");
int red = Integer.parseInt(data[0]);
int green = Integer.parseInt(data[1]);
int blue = Integer.parseInt(data[2]);
int rgb = new Color(red,green,blue).getRGB();
img.setRGB(x,y,rgb);
}
}
try
{
f = new File(outputFile);
ImageIO.write(img, "jpg", f);
}
catch(IOException e)
{
System.out.println("Error: " + e);
}
}
我无法理解问题是什么以及为什么我无法使用此功能获得更暗的图像。 (我知道总是有更简单和基本的方法来做到这一点,但这是一个多线程分配,我必须按照我解释的那样去做。)如果有人帮助我,我将不胜感激。
【问题讨论】:
-
您是否尝试过调试?您从数据中获得的每个像素的
rgb值是多少? -
您是否尝试过提供绝对文件名?我的猜测是它正在创建文件,而不是您期望的位置。
-
ImageIO.write(...)返回一个boolean指示是否安装了可以以给定格式写入图像的插件。总有一个 JPEG 插件安装,但在最近的 Java 版本中,它不使用 alpha 通道编写图像。最有可能的是,您只需将BufferedImage.TYPE_INT_ARGB更改为BufferedImage.TYPE_INT_RGB,一切都会奏效。无论如何,您似乎没有使用 alpha 通道。 -
@HaraldK 太棒了!谢谢你给的信息。现在可以了。
-
添加为下面的答案。
标签: java image image-processing javax.imageio