java - 为什么读取 png 图像时会出现垃圾值

标签 java image-processing

我正在编写一个 PNG 图像,每个像素的值为 15。当我读取书面图像时,我得到的不是 15,而是垃圾值。为什么会这样呢? 因为我想恢复相同的值,所以我选择了无损的 PNG 格式。我仍然得到垃圾值。 这是代码。

public static void main(String args[])
    {
        BufferedImage img = new BufferedImage(512, 512, BufferedImage.TYPE_INT_RGB);

        int[] RGBarray = null;
        int col  = 0;
        int row = 0;

        col = img.getWidth();
        row = img.getHeight();
        RGBarray = img.getRGB(0,0,col,row,null,0,col);   // Now RGBarray has all the values

        byte[] data = new byte[512*512];

        for(int k = 0; k < 262144; k++)
        {

                data[k] = 15;

        }

        int count = 0;
        for(int ro = 0; ro < 512 ; ro++)
        {
            for(int co = 0;co < 512; co++)
            {
                img.setRGB(co, ro, data[count++]);
            }
        }

      try{
                ImageIO.write(img, "png", new File("Test3.png"));
            }
        catch(Exception e)
            {
                e.printStackTrace();
            }
    BufferedImage img1 = null;

    File f = new File("Test3.png");
    try
    {
        img1 = ImageIO.read(f);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

        int[] RGBarray1 = null;
        int col1  = 0;
        int row1 = 0;

        col1 = img1.getWidth();
        row1 = img1.getHeight();
        RGBarray1 = img1.getRGB(0,0,col1,row1,null,0,col1);   // Now RGBarray has all the values

        for( int p = 0; p < 5; p++)
        {
            for(int j = 0; j < 5 ; j++)
            {
                System.out.print(img1.getRGB(p,j) + "\t");
            }
            System.out.println("");
        }
    }

仅供引用,我已经打印了 5 个值来检查是否会得到 15。但输出是 -16777216 -16777216 -16777216 -16777216 -16777216
-16777216 -16777216 -16777216 -16777216 -16777216
-16777216 -16777216 -16777216 -16777216 -16777216
-16777216 -16777216 -16777216 -16777216 -16777216
-16777216 -16777216 -16777216 -16777216 -16777216

最佳答案

您正在写入一个byte并读取int。试试这个 -

System.out.print((byte)img1.getRGB(p,j) + "\t");

关于java - 为什么读取 png 图像时会出现垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34412730/

相关文章:

java - 运行时创建内存高效常量的技术

java - 直接或在继承接口(interface)中注释的切入点匹配方法?

java - $$_Javasassist_11在java中是什么意思?

java - session 值未存储在使用 Chrome 的 wicket 应用程序中

opencv - OPENCV无法同时读取2个视频帧

python - 如何屏蔽图像中除内部特定颜色之外的所有内容

python - 为什么我不能调整 PNG 文件的亮度级别

java - 我们可以将字符串传递给需要 vector 参数的方法吗?

python - 如何提高这种numpy迭代的效率?

python - 如何找到图像中物体的中心和角度?