java - 如何在java中以矩阵形式(x-y平面)使像素在[1-255]范围内?

标签 java png pixel

我有一个 PNG 类型的图像(512 像素 * 512 像素)。我知道每个像素都是 8 位类型。所以,我们的范围是[0-255]。问题是我想要该图像的行和列,以便每个单元格都有一个 [0-255] 之间的数字。

不幸的是,我的程序运行良好,没有错误,但坏消息是它没有提供我想要的东西。每个单元格的输出有7个数字,即2894893 -2829100 -2829100 -2894893 -2894893 -2960686 -2960686 -2960686 -3092272 -3223858 -3289651 -3421237 -4144960 -368 4409 -3552823 -4144960 -4802890 -5263441等

我想要的只是[1-255]之间的范围? 即,我们应该有类似的内容,而不是上面的输出 23 182 33 250 等

请记住,我需要使用二维而不是一维(意味着数组[行] [列]而不是数组[索引])。 这是代码:

 ima = ImageIO.read(new File("how.png"));

    int [] pix = ima.getRGB(0, 0, ima.getWidth(), ima.getHeight(), null, 0, ima.getWidth());

    int count=0;        
    for (int i=0; i < ima.getHeight() ; i++)
    {
        for (int j=0; j < ima.getWidth() ; j++){
            System.out.print(pix[count]+" ");
            count++;
        }
        System.out.println();

    }

该方法取自getting pixel data from an image using java的成员@davenpcj .

谢谢

最佳答案

您得到的是 RGB 值,其中三个分量中的每一个都存储为一个字节。也就是说,该整数由 4 个字节组成,每个字节代表像素的 R、G、B 和 alpha 分量。例如,像素值 2894893 的二进制值如下所示:

 00000000 00101100 00101100 00101101

您可以通过屏蔽整数像素值来获取各个 channel :

int red = (pix[count] & 0xFF);
int green = (pix[count] >> 8) & 0xFF;    
int blue = (pix[count] >> 16) & 0xFF;
int alpha = (pix[count] >> 24) & 0xFF;

关于java - 如何在java中以矩阵形式(x-y平面)使像素在[1-255]范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34295497/

相关文章:

java - 如何从客户端 Java 调用 PUT 方法?

unity3d - Unity ShaderLab 中的像素完美着色器

opencv - 在opencv中读取检测到的圆圈中像素的HSV值

R: 在定义png设备之前如何找出OpenStreetMap数据的尺寸(宽度,高度)?

java - 获取 ScrolledForm SWT 中的 x 坐标

java - 比尔·普格·辛格顿(Bill Pugh Singleton),为什么线程安全?

java - 如何将日志跟踪从控制台导出到文本文件

java - Swing组件默认渐变背景

ios - Starling AS3 : A lot of textures, 内存警告 iOS

c# - 从字节数组创建一个 PNG