当前位置: 首页 > 知识库问答 >
问题:

获取BufferedImage上像素的颜色

王鹏飞
2023-03-14
public class PixelColour extends JPanel{

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        BufferedImage bi = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB);
        Graphics2D gbi = bi.createGraphics();
        gbi.setColor(Color.black);
        gbi.setBackground(Color.white);
        gbi.drawLine(100, 100, 100, 200);
        g2.drawImage(bi, null, 0, 0);
        int rgb = bi.getRGB(100, 100);
        int red = (rgb >> 16) & 0xFF;
        int green = (rgb >> 8) & 0xFF;
        int blue = (rgb & 0xFF);
        System.out.println(red + " " + green + " " + blue);
    }

    public static void main(String[] args) throws IOException{
        PixelColour pc = new PixelColour();
        JFrame frame = new JFrame("Pixel colour");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(pc);
        frame.setSize(500,500);
        frame.setVisible(true);
    }
}

共有1个答案

龚伯寅
2023-03-14

gbi.setbackgroundge(color.white)之后添加gbi.clearrect(0,0,bi.getwidth(),bi.getheight());

ClearRect()在图像上绘制背景色。如果您只是设置一个新的背景色,它不会改变图像。

public void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    BufferedImage bi = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB);
    Graphics2D gbi = bi.createGraphics();
    gbi.setColor(Color.black);
    gbi.setBackground(Color.white);

    // here
    gbi.clearRect(0, 0, bi.getWidth(), bi.getHeight());

    gbi.drawLine(100, 100, 100, 200);
    g2.drawImage(bi, null, 0, 0);
    int rgb = bi.getRGB(50, 50);    // off the black line
    int red = (rgb >> 16) & 0xFF;
    int green = (rgb >> 8) & 0xFF;
    int blue = (rgb & 0xFF);
    System.out.println(red + " " + green + " " + blue);
}

这个指纹

255 255 255
255 255 255
 类似资料:
  • 问题内容: 我正在读取BufferedImage中的像素颜色,如下所示: 现在,除了具有透明性的png之外,此方法都可以正常工作。我发现如果x,y指的是没有颜色的透明像素,我仍会读取一种颜色,通常与图像中其他位置使用的颜色相同。 如何检测像素实际上是透明的而不是彩色的? 谢谢 问题答案: 结果也是一个介于0(完全透明)到255(完全不透明)之间的值。

  • 问题内容: 我正在尝试为组件的选定像素获取Swing JFrame的颜色。 例如,我想知道的给定的颜色在他们的点。 原因是我的组件是一个部分透明的覆盖层,在下面。对于不透明的像素,鼠标事件应由叠加层处理。对于透明像素,应将鼠标事件转发到下方。 这是这样做的方法吗? 问题答案: 我想说(希望这样做会带来更好的性能),也许,如果您愿意采用这种方法,则最好创建一个尺寸为1x1像素的图像,然后转换其创建的

  • 问题内容: 谁能解释如何从BufferedImage获取rgb值数组? 我在BufferedImage中有一个灰度图像,需要提取一个描述图像的0到255个值的数组。 我知道BufferedImage是正确的,因为我可以将其保存为PNG。但是,如果使用,我会得到一堆巨大的负数。 我搜索了一段时间,并看到了一些有关转移某些值的参考资料([post]),但并不太了解他们在说什么。 基本上,我想从Buff

  • 谁能解释一下如何从BufferedImage中获得一个rgb值数组? 我在BufferedImage中有一个灰度图像,需要提取一个描述图像的0到255个值的数组。 我知道BufferedImage是正确的,因为我可以将其保存为PNG。但是,如果我使用我得到一堆巨大的负数。 我搜索了一段时间,看到了一些关于转移一些价值观的参考(帖子),但并不真正理解他们在说什么。 基本上,我想从BufferedIm

  • 我正在尝试将此java代码转换为python: 我在python中尝试过这个: 然而问题是我在python中得到不同的值。 为什么java返回负整数值,我如何在python中获得相同的结果?

  • 我试图从bufferedimage中获取像素数据,该bufferedimage将只包含灰度半透明图像(argb)。我从图像中得到一个WritableRaster,并使用光栅的setPixels方法设置它的像素。使用此方法,我得到ArrayIndexOutOfBounds异常。在做了一些研究后,我发现BufferedImages在每个频带每个像素存储一个整数,而不是每个像素存储一个整数。也就是说,对