gpt4 book ai didi

java - java bufferedImage 真的提供黑色 Canvas 吗?

转载 作者:行者123 更新时间:2023-11-30 07:12:22 25 4
gpt4 key购买 nike

我试图用两种不同的方法实现同一件事。我想画一个简单的矩形。

在第一种方法中,我简单地获取 g 对象并直接在其上绘制。

public void paintComponent(Graphics g){ 
super.paintComponent(g);
g.drawRect(100, 100, 50, 50);
}

在第二种方法中,我在其上绘制图像 Canvas ,然后在 jpanel 的图形对象上绘制图像。

public void paintComponent(Graphics g){
super.paintComponent(g);
BufferedImage img = new BufferedImage(500, 500, BufferedImage.TYPE_INT_RGB);
Graphics a = img.getGraphics();
a.drawRect(100, 100, 50, 50);
g.drawImage(img, 0, 0, 500, 500, null);
}

我希望两者都能产生相似的输出,但我在下面绘制图像的那个在黑色背景上给出了白色矩形,而在顶部的那个在白色背景上给出了黑色矩形。为什么会这样?

最佳答案

当您在组件上进行自定义绘制时。首先绘制背景。看来您正在扩展 JComponent ,它将简单地绘制一个白色背景。其他 Swing 组件将使用 setBackground() 方法指定的颜色,例如 JPanel 默认为灰色。然后将图形对象设置为组件的前景色,这样您就可以进行自定义绘画了。默认前景颜色为黑色。

当您创建 BufferedImage 时,它​​看起来默认填充有黑色背景,然后 Graphics 对象的颜色设置为白色,因此您可以进行自定义绘画,它会显示在黑色背景上。您始终可以将缓冲图像的背景填充为任何颜色,然后更改图形对象以使用任何颜色作为前景。

关于java - java bufferedImage 真的提供黑色 Canvas 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20447115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com