我想在缓冲图像上画一个圆圈,就像png一样
我想使用这个圆圈来替换我正在处理的绘图应用程序的鼠标光标。
我无法从谷歌下载圆圈png,因为我需要根据我使用它的工具的宽度不断更改此圆圈的大小。
这是我到目前为止的尝试
public static BufferedImage getCircle() {
BufferedImage bufferedImage = new BufferedImage(30, 30, BufferedImage.TYPE_INT_RGB);
Color transparent = new Color(0x00FFFFFF, true);
Graphics2D g = (Graphics2D) bufferedImage.getGraphics();
//trying to make the bufferedImage transparent
g.setComposite(AlphaComposite.Src);
g.setColor(transparent);
g.setBackground(transparent);
g.fillRect(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());
//drawing the circle
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setColor(Color.black);
g.drawOval(0, 0, 200, 200);
return bufferedImage;
}
应该看起来像:
但是我的代码目前只创建白色方块。
答案 0 :(得分:1)
您的代码有两个问题(已在评论中显示)。首先,您将半径 200px
的圆圈绘制为尺寸 30px
的图像。如果仔细观察,你几乎看不到右下角的黑色像素。
通过调整尺寸以使其适合内部来修复它,例如:
BufferedImage bufferedImage = new BufferedImage(60, 60, BufferedImage.TYPE_INT_RGB);
...
g.drawOval(5, 5, 50, 50);
接下来就是要实现透明背景。为此,您需要将图像的类型设置为支持透明度的颜色模型,例如ARGB
(A = Alpha =透明度),而不是{ {1}}:
RGB
最后你可能想要增加边框的粗细以获得你展示的图像。您可以使用BufferedImage bufferedImage = new BufferedImage(60, 60, BufferedImage.TYPE_INT_ARGB);
:
g.setStroke(...)
使用此设置可以获得以下结果(透明度):
使用值来调整圆圈以满足您的确切需求。