【问题标题】:Interesting. Creating and reading RGB values are different in JAVA有趣的。在 JAVA 中创建和读取 RGB 值是不同的
【发布时间】:2024-06-22 09:50:01
【问题描述】:

今天我去学校把这件事给我的老师看,但他不理解,也很惊讶。

对于“1.jpg”,首先我将红色、绿色、蓝色值向右移动并打印这些值。在我向左移动所有这些值之后,并在创建新图片之后。“2.jpg”(所以相同的图片)

最后我看两张图片并比较它们。这些看起来彼此相似,但它们并不相同。我检查了这些比较。

public static void main(String[] args) {

        BufferedImage resim=null;
        File f=null;

        try {
            f=new File("C:\\Users\\burak\\Desktop\\javaresim\\1.jpg");
            resim=ImageIO.read(f);

        } catch (Exception e) {
            e.printStackTrace();
        }

          yük=resim.getHeight();
          gen=resim.getWidth();
          boyut=(gen*yük);


         for(int i=0;i<gen;i++){
              for(int j=0;j<yük;j++){

                  int p=resim.getRGB(i, j);

                  int a=(p&0xff000000)>>24;
                  int r=(p&0x00ff0000)>>16;
                  int g=(p&0x0000ff00)>>8;
                  int b=p&0x0000000ff;

                  System.out.print(r+" ");

                  p=(a<<24)|(r<<16)|(g<<8)|b;
                  resim.setRGB(i, j, p);
              }
         }

         try{
             f=new File("C:\\Users\\burak\\Desktop\\javaresim\\2.jpg");

             ImageIO.write(resim, "jpg", f);

            }catch(Exception e){
             e.printStackTrace();
              } 
           }      
}

【问题讨论】:

    标签: java image jpeg rgb bufferedimage


    【解决方案1】:

    JPEG 通常是一种“有损”格式(取决于选项)。这意味着源 RGB 值在存储时不会准确再现。您可以将 jpeg 写入的选项设置为无损,但这会增加文件大小,并首先破坏使用 jpeg 的目的。

    我的猜测是,如果您对 BMP 文件或任何无损格式尝试相同的代码,图像将完全相同。

    加载压缩图像,然后将其写回压缩格式这一事实引入了“副本的副本”问题。您的原始图像已经有损。您将其加载,然后将其保存,再次启用压缩。每次这样做时,都会丢失一些原始信息。

    这类似于拍照。每次执行此操作时,您都会丢失信息。

    【讨论】:

      【解决方案2】:

      JPEG 压缩过程中有几个步骤会改变输入。

      1. 彩色图像从 RGB 转换为 YCbCr。两种颜色系统之间没有 1:1 匹配,因此值可能会被裁剪。

      2. DCT 是对整数值执行的浮点运算。这会导致舍入差异(通常最多 +/-1)。

      3. 量化过程对 DCT 系数执行整数除法,将许多变为 0 并丢弃其他值中的小数。

      结果是输出的图像很少与输入的完全一致。

      【讨论】:

      • 我偶然解决了这个问题。 ImageIO.write(resim, "bmp", f);将 jpg 更改为 bmp 正在再次输出 jpg 图像。但问题解决了。图像大小相等。
      最近更新 更多