java - 创建自定义 BufferedImage

标签 java image awt bufferedimage

我正在编写一个方法,它采用三个 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/

相关文章:

java - 如何使用 TYPE_BYTE_GRAY 使用 AWT 高效创建灰度缓冲图像

Java 2D 渲染深度思路

wcf - 通过 wcf 将 byte[](超过 20 KB)发送到 silverlight

c++ - 如何为 OpenCV 多核图像处理创建 TBB 任务调度程序? C++

Java:从另一个类导入字符串数组

java - Oracle Type4 驱动程序的 ClassNotFoundException

css - 无法让背景图片在 stacklayout 上工作

java - 如何移动 JFrame 形状

java - 高效地将 XML 引入 Elasticsearch

java - Java中静态 block 的线程安全