java - 在 Java 中使用 BufferedImage 创建图像

标签 java arrays rgb bufferedimage

我正在尝试使用 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 位整数:

    enter image description here

关于java - 在 Java 中使用 BufferedImage 创建图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22176202/

相关文章:

java - 从构造函数调用重写的方法

java - Android Material 按钮切换组

python - 如何有条件地组合两个相同形状的numpy数组

excel - matlab:excel中rgb的颜色错误

ios - 如何从 RGB 值中获取 CGColor?

java - 在 Java 中实例化对象时产生奇怪的垃圾

Javaagent 应用程序类未附加到变压器

javascript - 如何在 javascript for 循环中从字符串创建 if 条件语句而不使用 eval()

ruby-on-rails - 检查数组的每个元素是否包含在另一个数组的一组值中

python - opencv python 中每个 channel 的 HSV 、 YCrCb 和 LAB 颜色空间的像素值范围是多少