我正在编写一个方法,它采用三个 2D int 数组(表示图像的 R、G 和 B 值)、宽度和高度以及表示指定图像是彩色还是黑白的 boolean 值。我希望该方法执行的操作是根据给定的输入数据创建 BufferedImage。
这是我到目前为止所拥有的:
public static BufferedImage createImage(int[][] r, int[][] g, int[][] b,
int width, int height, boolean isColor) {
BufferedImage ret;
if (isColor)
ret = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
else
ret = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
WritableRaster raster = ret.getRaster();
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if (isColor) {
raster.setSample(j, i, 0, r[i][j]);
raster.setSample(j, i, 1, g[i][j]);
raster.setSample(j, i, 2, b[i][j]);
}
else
raster.setSample(j, i, 0, r[i][j]);
}
}
return ret;
}
但是,我编写了一个单元测试,它应该创建一个填充白色的 5x5 彩色图像(255, 255, 255),但是栅格数据填充了非常大的值而不是 255。我对此不太熟悉图像内容和一般的 AWT,所以我觉得我没有正确创建 BufferedImage。我一直在尝试引用 BufferedImage 的 Java API,但没能找到答案。任何帮助将不胜感激。
最佳答案
你的代码对我来说看起来没问题。图像应填充 0xffffff(R、G 和 B 各为 255),十进制为 16777215。 (如果你有一个 Alpha channel ,那么每个完全不透明的像素将为 0xffffffff,十进制为 -1。)
关于java - 创建自定义 BufferedImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5207833/