gpt4 book ai didi

java - Java 中的 SVG 圆分辨率

转载 作者:行者123 更新时间:2023-12-01 13:45:35 26 4
gpt4 key购买 nike

我有一个在 SVG 中表示的圆:

    <circle cx="50" cy="50" r="50" stroke="black" stroke-width="1" style="fill:white"/>

然后,我将此圆转换为 Java 中的 BufferedImage,宽度和高度 = 100,imageType = BufferedImage.TYPE_INT_ARGB。然后,我通过以下代码将此 BufferedImage 绘制到另一个上:

    BufferedImage source = ImageIO.read(new File("imgToDrawOnto.png"));
Graphics g = source.getGraphics();
g.drawImage(circleImg, 100, 100, null);

其中,circleImg 是 SVG 圆的 BufferedImage。这工作正常并绘制到图像上,但结果非常像素化。有什么办法可以使圆更平滑吗?我宁愿继续使用SVG,但如果SVG没有办法,也可以考虑其他方式。

我尝试过的事情:

  1. 我将圆的半径设置为 500,并将 BufferedImage 的高度和宽度保留为 100。
  2. 我已将 BufferedImage 高度和宽度设置为 1000,并使用以高度和宽度作为参数的绘制方法,并将它们设置为 100。
  3. 我同时完成了 1 和 2。
  4. 我也尝试过让半径更大,即。 2500
  5. 我还将circleImg参数更改为circleImg.getScaledInstance(100, 100, 1)

没有任何效果。有些看起来更平滑,但不是很多,而另一些看起来更糟糕。另外值得注意的是,我在使用 g.drawOval(150, 150, 100, 100) 时也观察到了像素化。这让我相信问题不在于 SVG,但我可能是错的。

Java 版本:

    java version "1.6.0_30"    Java SE Runtime Enviroment (build 1.6.0_30-b12)    Java HotSpot 64-bit Server VM (build 20.5-b03, mixed mode)

对于 SVG,我使用 SVG-Salamander v1.0

最佳答案

当您使用ImageIO.read读取图像时,图像文件的颜色模型将被保留。由于您读取的是 PNG 文件,问题可能是源文件使用的是索引颜色模型(调色板),颜色很少甚至可能不匹配。另一个问题可能是您必须启用抗锯齿以避免所谓的像素化。

为了避免颜色模型问题,您可能必须使用例如创建一个新的 BufferedImage ARGB 颜色模型,您首先在其上绘制加载的图像,然后绘制 SVG 图形:

BufferedImage source = ImageIO.read(new File("imgToDrawOnto.png"));
BufferedImage newImage = new BufferedImage(
source.getWidth(),
source.getHeight(),
BufferedImage.TYPE_INT_ARGB);

Graphics2D g = (Graphics2D)newImage.getGraphics();

g.drawImage(source, 0, 0, null);
g.drawImage(circleImg, 100, 100, null);

要启用抗锯齿功能,您可以在绘制其他图像之前在 Graphics2D 对象上设置适当的渲染提示:

g.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);

您还可以通过启用双线性或双三次插值来提高抗锯齿质量:

g.setRenderingHint(
RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);

g.setRenderingHint(
RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BICUBIC);

添加了示例图像:enter image description here

关于java - Java 中的 SVG 圆分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20397481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com