使用BufferedImages获取图像的每个像素的颜色

我试图获得图像每个像素的每种颜色。 我的想法如下:

int[] pixels; BufferedImage image; image = ImageIO.read(this.getClass.getResources("image.png"); pixels = ((DataBufferInt)image.getRaster.getDataBuffer).getData(); 

是对的吗? 我甚至无法检查“pixels”数组包含什么,因为我收到以下错误:

 java.awt.image.DataBufferByte cannot be cast to java.awt.image.DataBufferInt 

我只想获得arrays中每个像素的颜色,我该如何实现?

 import java.io.*; import java.awt.*; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; public class GetPixelColor { public static void main(String args[]) throws IOException{ File file= new File("your_file.jpg"); BufferedImage image = ImageIO.read(file); // Getting pixel color by position x and y int clr= image.getRGB(x,y); int red = (clr & 0x00ff0000) >> 16; int green = (clr & 0x0000ff00) >> 8; int blue = clr & 0x000000ff; System.out.println("Red Color value = "+ red); System.out.println("Green Color value = "+ green); System.out.println("Blue Color value = "+ blue); } } 

当然你必须为所有像素添加一个for循环

问题(也与第一个答案相关的答案)是,您几乎不知道使用ImageIO读取后缓冲图像的确切类型。 它可以包含DataBufferByteDataBufferInt 。 您可以在某些情况下通过BufferedImage#getType()推断出它,但在最坏的情况下,它的类型为TYPE_CUSTOM ,然后您只能回退到某些测试instanceof

但是,您可以将图像转换为BufferedImage,保证其具有带有ARGB值的DataBufferInt – 即类似于

 public static BufferedImage convertToARGB(BufferedImage image) { BufferedImage newImage = new BufferedImage( image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D g = newImage.createGraphics(); g.drawImage(image, 0, 0, null); g.dispose(); return newImage; } 

否则,您可以调用image.getRGB(x,y) ,它可以动态执行所需的转换。

顺便说一句:请注意,获取BufferedImage的数据缓冲区可能会降低绘制性能,因为图像无法再被“管理”并在内部保留在VRAM中。

 byte[] pixels 

 int[] pixels 

试试这个: Java – 从图像中获取像素数组

 import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class ImageUtil { public static Color[][] loadPixelsFromImage(File file) throws IOException { BufferedImage image = ImageIO.read(file); Color[][] colors = new Color[image.getWidth()][image.getHeight()]; for (int x = 0; x < image.getWidth(); x++) { for (int y = 0; y < image.getHeight(); y++) { colors[x][y] = new Color(image.getRGB(x, y)); } } return colors; } public static void main(String[] args) throws IOException { Color[][] colors = loadPixelsFromImage(new File("image.png")); System.out.println("Color[0][0] = " + colors[0][0]); } }