我有一个用BufferedImage.TYPE_INT_ARGB
类型构造的屏幕外BufferedImage。它可以包含任何东西,我正在寻找一种方法来(相当有效地)用透明像素完全覆盖图像,从而产生一个“看不见”的图像。
使用类似这样的东西:
(bufimg.getGraphics()).setColor(new Color(10, 10, 100, 0));
(bufimg.getGraphics()).fillRect (0, 0, x, y);
没有任何效果。一种可能的方法可能是重写BufferedImage中的每个像素,但我不确定这是最好的解决方案。你会怎么做?
编辑
图形文档建议不要对屏幕外的图像使用clearRect,但我已经尝试过了,结果与上面的相同。
edit2
在试验了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值的添加有关吗?
发布于 2011-06-10 01:47:33
使用透明合成清除背景后,需要将其设置回SRC_OVER才能再次正常绘制。例如:
//clear
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR));
g2.fillRect(0,0,256,256);
//reset composite
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
//draw
g2.setPaint(Color.RED);
g2.fillOval(50,50,100,100);
发布于 2011-04-15 13:32:17
如果将图形对象强制转换为Graphics2D对象,则可以通过
AlphaComposite composite = AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f);
Graphics2D g2d = (Graphics2D) image.getGraphics();
g2d.setComposite(composite);
g2d.setColor(new Color(0, 0, 0, 0));
g2d.fillRect(0, 0, 10, 10);
发布于 2015-02-24 04:40:55
设置图形对象的背景似乎可以完成这项工作:
g.setBackground(new Color(0, 0, 0, 0));
(至少在出于缩放目的而绘制图像时)
https://stackoverflow.com/questions/5672697
复制相似问题