【发布时间】:2011-08-06 01:46:03
【问题描述】:
我有一个屏幕外的 BufferedImage,其类型为 BufferedImage.TYPE_INT_ARGB。它可以包含任何东西,我正在寻找一种方法来(相当有效地)用透明像素完全覆盖图像,从而产生一个“不可见”的图像。
使用这样的东西:
(bufimg.getGraphics()).setColor(new Color(10, 10, 100, 0));
(bufimg.getGraphics()).fillRect (0, 0, x, y);
没有效果。一种可能的方法可能只是覆盖 BufferedImage 中的每个像素,但我不确定这是最好的解决方案。你会怎么做?
[编辑]
Graphics 文档建议不要将 clearRect 用于屏幕外图像,但我已经尝试过,结果与上述相同。
[编辑2]
在尝试了 MeBigFatGuy 的代码后(谢谢!),它确实清除了图像。但它也停止了对该图像的进一步绘画(或似乎)。例如这段代码:
BufferedImage img = new BufferedImage (600, 600, BufferedImage.TYPE_INT_ARGB);
Graphics g = img.createGraphics ()
g.drawLine (100, 100, 500, 500);
AlphaComposite composite = AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f);
g.setComposite(composite);
g.setColor(new Color(0, 0, 0, 0));
g.fillRect(0, 0, 600, 600);
graphicsAI.setColor(new Color (10, 10, 10, 255));
graphicsAI.drawLine (100, 100, 500, 500);
导致图像上看不到任何东西(我正在将图像绘制到 JPanel)。这与添加 alpha 值有关吗?
【问题讨论】:
-
除了我的回答之外,这是我在这里提出的一个与此相关的问题(1.3 KView as I type this comment)。请务必阅读 Stacker 的最佳答案:stackoverflow.com/questions/2825837(请注意,我确实希望将精确的像素——也就是说,没有颜色模型转换——放入底层 int[] 中,我想要这将很快完成)。
-
通过 g2d.getComposite() 拯救旧复合材料,并在填充矩形后通过 g2d.setComposite(oldC) 设置复合材料;
-
我认为你应该简单地在你的 Graphics 实例上调用 dispose() 来恢复之前的图形上下文。
标签: java image transparency bufferedimage