如何获取图像特定像素的颜色JAVA

如何获取图像特定像素的颜色JAVA,java,image,colors,rgb,pixel,Java,Image,Colors,Rgb,Pixel,是否可以获取图像的特定像素的颜色 我知道如何从buffereImage获取它: Color color = new Color(bufferedImage.getRGB(x, y)); 但这不适用于类似以下示例的java.awt.Image: 有办法吗?提前谢谢 ImageIO.read(文件)应返回一个buffereImage。您还可以使用PixelGrabber获取特定颜色。例如: private static Color getSpecificColor(Image image, int

是否可以获取图像的特定像素的颜色

我知道如何从
buffereImage
获取它:

Color color = new Color(bufferedImage.getRGB(x, y));
但这不适用于类似以下示例的
java.awt.Image

有办法吗?提前谢谢

ImageIO.read(文件)
应返回一个
buffereImage
。您还可以使用
PixelGrabber
获取特定颜色。例如:

private static Color getSpecificColor(Image image, int x, int y) {
  if (image instanceof BufferedImage) {
    return new Color(((BufferedImage) image).getRGB(x, y));
  }
  int width = image.getWidth(null);
  int height = image.getHeight(null);
  int[] pixels = new int[width * height];
  PixelGrabber grabber = new PixelGrabber(image, 0, 0, width, height, pixels, 0, width);
  try {
    grabber.grabPixels();
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  int c = pixels[x * width + y];
  int  red = (c & 0x00ff0000) >> 16;
  int  green = (c & 0x0000ff00) >> 8;
  int  blue = c & 0x000000ff;
  return new Color(red, green, blue);
}
ToolkitImage
还有一种获取
BufferedImage
的方法,但可能返回null:

ImageIO.read(文件)
应返回一个
buffereImage
。您还可以使用
PixelGrabber
获取特定颜色。例如:

private static Color getSpecificColor(Image image, int x, int y) {
  if (image instanceof BufferedImage) {
    return new Color(((BufferedImage) image).getRGB(x, y));
  }
  int width = image.getWidth(null);
  int height = image.getHeight(null);
  int[] pixels = new int[width * height];
  PixelGrabber grabber = new PixelGrabber(image, 0, 0, width, height, pixels, 0, width);
  try {
    grabber.grabPixels();
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  int c = pixels[x * width + y];
  int  red = (c & 0x00ff0000) >> 16;
  int  green = (c & 0x0000ff00) >> 8;
  int  blue = c & 0x000000ff;
  return new Color(red, green, blue);
}
ToolkitImage
还有一种获取
BufferedImage
的方法,但可能返回null:


@VGR但我可以通过这种方式初始化
图像
…是的,多态性允许您将其称为图像、对象,甚至是透明实例。但不管您的代码是否将其视为图像,它实际上是一个缓冲图像。@VGR但它不应该比吗?!将
Image
更改为
BufferedImage
((BufferedImage)Image)。getRGB(x,y)
@VGR,但我可以通过这种方式初始化
图像
。是的,多态性允许您将其称为图像、对象,甚至是透明实例。但不管您的代码是否将其视为图像,它实际上是一个缓冲图像。@VGR但它不应该比吗?!将
图像
更改为
缓冲图像
((缓冲图像)图像)。getRGB(x,y)