【发布时间】:2015-06-09 20:38:06
【问题描述】:
我通过覆盖 paintComponent 方法在面板上绘画。
class Canvas extends Panel ...
...
override def paintComponent(g: Graphics2D) {
super.paintComponent(g)
for (cmd <- commands.get) cmd.execute(g, this)
}
好的。其中一个命令就是这个。
case class TestCommand() {
def execute(g: java.awt.Graphics2D, c: Canvas) = {
val img = new BufferedImage(c.width, c.height, BufferedImage.TYPE_INT_RGB)
g.drawImage(img, null, 0, 0)
}
我想要做的是从 Graphics2D 对象创建一个 BufferedImage,这样我就可以读取位置 x、y 的某个像素的值。
但是,当执行此命令时,我注意到 drawImage 方法导致我的面板完全变黑,擦除了到目前为止我在其上绘制的所有内容。我希望该命令简单地为我在面板上绘制的内容创建一个 BufferedImage,而不是以某种方式影响 Graphics2D 对象本身。我在这里做错了什么?
【问题讨论】:
-
“我希望该命令简单地为我在面板上绘制的内容创建一个 BufferedImage” 我发现在图像,然后简单地将图像绘制到组件(或者可能只是在标签中显示图像)。
-
"创建一个我在面板上绘制的 BufferedImage" 听起来您想将面板绘制到图像上,但现在您正在绘制 (空白)图像到面板。我也同意安德鲁的评论。
-
感谢 cmets。你是对的,我正在将空白图像绘制到面板上。我不明白为什么 drawImage 方法正在这样做:“渲染一个用 BufferedImageOp 过滤的 BufferedImage。应用的渲染属性包括 Clip、Transform 和 Composite 属性。” -Oracle 文档。我不明白安德鲁斯的建议,你能给我举个例子吗?
-
提示:添加@Radiodef(或重要的
@)以通知此人有新评论。 “你能给我举个例子吗?”看到这个2D animation in a buffered image,这个animated stroked border和这个animation of dots and lines..从BufferedImage得到一个Graphics2D对象很简单打电话给createGraphics()。
标签: swing scala graphics2d drawimage