我正在尝试使用 BufferedImage 中的 setRGB() 方法使用给定的 2D 像素数组(行和列)重新创建图像。
下面是以下代码:
BufferedImage bufferedImage = new BufferedImage(reconstructedJPEG[0].length, reconstructedJPEG.length, BufferedImage.TYPE_INT_RGB);
//loop through redPixels[][] array
for(int row=0; row<redPixels.length; row++){
for(int col=0; col<redPixels[0].length; col++){
//call setRGB() on redPixels
bufferedImage.setRGB(col, row, (redPixels[row][col]));
}
}
上面的代码有效,但我不确定如何设置绿色和蓝色像素数组? 现在,它是一个非常暗淡的深红色/紫色图像,看起来不像原始图像。
另外,我是否可以将这些数组形成一维图像(将其原始像素、红+绿+蓝分量形成一个整数?
谢谢任何帮助都会很棒。
最佳答案
使用按位运算符将 3 个 channel (红色、绿色和蓝色)的各个颜色值组合到一个像素中:
int rgb = (redValue & 0xff) << 16 | (greenValue & 0xff) << 8 | (blueValue & 0xff);
然后以组合值作为参数调用setRGB
:
bufferedImage.setRGB(col, row, rgb);
按位运算语句乍一看可能很麻烦,但它执行以下操作:
使用
& 0xff
掩码获取每个 channel 值并使其成为基于 8 位范围的值 (0, 255)(格式BufferedImage.TYPE_INT_RGB
期望 channel 为 8 位值)redValue 和 0xff
,greenValue & 0xff
,blueValue 和 0xff
使用以下布局将 channel 值打包为一个 32 位整数:
关于java - 在 Java 中使用 BufferedImage 创建图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22176202/