从PNG中读取像素的RGB组件值((255,255,255))
我想找到一种方法,从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]
所以,除非你能提供一个例子(代码和图片),说明你得到的输出不正确,以及你期望的输出是什么,否则很难知道还能建议什么。