当前位置: 首页 > 知识库问答 >
问题:

如何绘制BufferedImage的扇区?

郝修为
2023-03-14

我用鼠标光标制作了一个游戏,我想用绿色版本的图像覆盖光标来表示健康状况,但只有与健康百分比相对应的几何部分。来自以下帖子的解决方案:在java中绘制圆的切片?

    //Unfortunately all this does is cause nothing to draw, but commenting this out allows the overlay image to draw
    Arc2D.Double clip = new Arc2D.Double(Arc2D.PIE);
    double healthAngle = Math.toRadians((((Double)data.get("health")).doubleValue() * 360.0 / 100.0) - 270.0);
    clip.setAngles(0, -1, Math.cos(healthAngle), Math.sin(healthAngle));
    System.out.println(Math.cos(healthAngle) + " " + Math.sin(healthAngle));
    g.setClip(clip);

简而言之,给定任何角度,如何绘制BuffereImage的扇区?

共有1个答案

卫俊力
2023-03-14

如果您阅读了setClip(Shape)的API文档,您将看到唯一保证工作的形状是矩形。因此,设置剪辑可能不起作用。

然而,还有其他选择。最明显的可能是使用纹理绘制(TexturePaint)用缓冲图像(BuffereImage)填充弧。类似于:

TexturePaint healthTexture = new TexturePaint(healthImg, new Rectangle(x, y, w, h));
g.setPaint(healthTexture);
g.fill(arc); // "arc" is same as you used for "clip" above

另一种选择是首先在透明背景上绘制纯色弧,然后在透明背景上绘制图像,在波特-达夫模式下使用SRC_。类似于:

g.setPaint(Color.WHITE);
g.fill(arc); // arc is same as your clip
g.setComposite(AlphaComposite.SrcIn); // (default is SrcOver)
g.drawImage(x, y, healthImg, null);
 类似资料:
  • 本文向大家介绍php绘制一个扇形的方法,包括了php绘制一个扇形的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php绘制一个扇形的方法。分享给大家供大家参考。具体如下: php绘制一个扇形。关于参数说明,除最后一个参数外,其它都与弧线的参数一样,请参考上一篇《php绘制一条弧线的方法》。最后一个参数有四种类型。分别是: IMG_ARC_PIE、IMG_ARC_CHORD、IMG_A

  • 问题内容: 我试图在bufferedimage上绘制水平和垂直线。它最终应该看起来像一个网格单元。但是,当我运行代码时,我只看到两行:最左边的行和最上面的行(即,从0,0到0,图像的高度和从0,0到图像的宽度,0的一行),这里是代码段: 和覆盖的绘制方法: 所有这些都在扩展了JPanel的名为RobotMaze的类中。任何帮助表示赞赏。 问题答案:

  • 我正在尝试调整图像大小,将其另存为BuffereImage。如果不缩放图像,效果很好。 在下面的代码中,文件名被传入并转换为buffereImage。使用

  • 我正在开发一个Java应用程序,它从dvi帧采集器中捕获视频。我想渲染我从这个帧采集器中实时获得的帧。但是我面临着生产力的问题——渲染非常慢,我的计算机每秒只能渲染5-6帧。尽管该设备每秒能够捕获多达40帧。我分析了我的代码,发现绘图方法相对较慢。如果我调用带有BMP图像的绘图方法,我通过ImageIO. readImage加载,比使用绘图需要20毫秒。对于图像,我从帧采集器中获得,绘制它们需要1

  • 问题内容: 我正在用Java编写的Paint应用程序上工作,并 遇到了一些(更多)问题。我有一个gui和一个工作程序(kinda),我唯一的问题是 用户绘制的线条和图形没有保存(在 绘制下一个图形后消失)。 从过去的问题中,我了解到我将需要使用BufferedImage来 存储图形,然后在我的绘画类中绘画它。 我的问题是,任何人都可以提供有关如何使用 缓冲图像来存储和绘制图形的基本解释/示例,以及

  • 问题内容: 在Windows上运行的某些Java代码中,我正在从磁盘读取一些大的RGB数据块,并希望尽快将其显示在屏幕上。RGB数据是每个通道8位,没有任何alpha。目前,我具有类似以下的代码来创建BufferedImage。 问题在于将其呈现到屏幕的性能非常慢。大约250-300毫秒。我读过,为了获得最佳性能,您需要在与屏幕兼容的BufferedImage中显示。为此,我将从上述方法返回的缓冲