java - 使用Buffered Image写入RGB图像

标签 java image-processing image-manipulation bufferedimage

我有一个二维字节数组 I[][],其中每个条目都是 0 或 -1(即 255)

现在我使用以下代码以 RGB 格式写入图像。

    public void writeImage(String outputFileName){
    BufferedImage BI = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

    for(int y = 0;y < height;y++){
        for(int x = 0;x < width;x++){
            int gray = (int) I[y][x] & 0xFF;
            int newRGB = (gray << 16) + (gray << 8) + gray;
            BI.setRGB(x, y, newRGB);
        }
    }
    try{
        ImageIO.write(BI, "JPG", new File(outputFileName));
    } catch(IOException e){
        System.err.println("Unable to output results");
    }
}

镜像写入成功。由于原始数据数组仅包含两个不同的值(0 和 255),因此我预计写入的图像也将具有两个不同的级别。然而,书面图像有 92 个不同的级别。我做错了什么?

最佳答案

您没有做错任何事,但 JPEG 压缩意味着每个像素中的级别并未准确记录 - 当图像未压缩时,JPEG 压缩伪像会将锐利边缘稍微扩散到其他像素。

关于java - 使用Buffered Image写入RGB图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5162702/

相关文章:

java - JsonPath : filter by value in array

java - 将 json 从 servlet 传递到 dojo

c++ - 如何在一台 Ubuntu 机器上安装 2 个 Opencv 版本以及如何一次激活一个版本进行编译?

android - 安卓的局限性

image-processing - 用高度替换区域的颜色 imagemagick

java - 使用 Reflections 库查询 Java 类路径中具有任意属性的类

java - yarn : Containers and JVM

javascript - 高对比度图像过滤器

image - 有什么可用的 C 矩阵操作库?

c++ - 不正确的输出 RGB 到 HSI 转换