从PNG中读取像素的RGB组件值((255,255,255))

-1 投票
2 回答
1515 浏览
提问于 2025-04-18 07:10

我想找到一种方法,从PNG文件中获取像素的RGB值(R、G、B的值范围是0到255)。在Python中,做法大概是这样的:

import Image
im = Image.open("dead_parrot.jpg") #Can be many different formats.
pix = im.load()
print im.size #Get the width and hight of the image for iterating over
print pix[x,y] #Get the RGBA Value of the a pixel of an image
pix[x,y] = value # Set the RGBA Value of the image (tuple)

我想在Java中实现同样的功能。我尝试了:

java.awt.image.BufferedImage.getRGB(int x, int y).

但是它给出的值很奇怪,比如-167667。而我需要的是像(255, 255, 255)这样的元组。我无法将getRGB的输出转换成这样的元组,以便我可以单独提取R、G和B的值。

2 个回答

1

在Java中,你可以用 ImageIO.read("mypic.png") 来读取一张图片,这样就能得到一个 BufferedImage 对象。之后,你可以使用 getData() 方法,这个方法会返回一个叫做 Raster 的对象。然后你就可以在这个对象上调用 getPixel 方法了。

3

所以使用这张图片...

测试

还有这段代码...

try {
    BufferedImage img = ImageIO.read(...);

    for (int x = 0; x < img.getWidth(); x++) {
        for (int y = 0; y < img.getHeight(); y++) {
            int rgb = img.getRGB(x, y);
            System.out.println(rgb + " = " + new Color(rgb, true));
        }
    }
} catch (IOException ex) {
    ex.printStackTrace();
}

它会产生这样的(示例)输出...

0 = java.awt.Color[r=0,g=0,b=0]
-16777216 = java.awt.Color[r=0,g=0,b=0]
-12779519 = java.awt.Color[r=61,g=0,b=1]
-12779519 = java.awt.Color[r=61,g=0,b=1]
-12779519 = java.awt.Color[r=61,g=0,b=1]
-16777216 = java.awt.Color[r=0,g=0,b=0]

所以,除非你能提供一个例子(代码和图片),说明你得到的输出不正确,以及你期望的输出是什么,否则很难知道还能建议什么。

撰写回答