在Java中的bufferedImage上绘制一个圆圈

时间:2017-11-23 19:22:30

标签: java

我想在缓冲图像上画一个圆圈,就像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;
}

应该看起来像:

enter image description here

但是我的代码目前只创建白色方块

1 个答案:

答案 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(...)

使用此设置可以获得以下结果(透明度):

resulting circle

使用值来调整圆圈以满足您的确切需求。