【发布时间】:2019-01-03 02:51:26
【问题描述】:
使用 Java Graphics 2D 逐分钟渲染图像以创建延时视频,导致运行时图像模糊。全高清 (1920 X 1080) 上的图像分辨率模糊出现在图像而不是视频上。
我使用缓冲图像作为下面的配置
BufferedImage alt = config.createCompatibleImage(resX, resY);
Graphics2D g2 = alt.createGraphics();
当resX 和resY 是
final int resX = 1920;
final int resY = 1080;
尝试使用此 x,y 配置绘制圆形和文本
// Image
g2.drawImage(img, leftSideX, resYTop + paddingImg, resX - leftSideX - paddingImg, resY - resYTop - paddingImg - paddingImg, null);
// Draw Cirlce 1
g2.setColor(new Color(0,161,155));
g2.fillArc(78, 160, 200, 200, 90, -340);
g2.setColor(new Color(73, 73, 73));
g2.fillArc(98, 180, 160, 160, 90, -340);
// Percentage
g2.setColor(new Color(0,161,155));
g2.setFont(g2.getFont().deriveFont(45F));
g2.drawString("10%", 135, 275 );
// Draw circle Legend
g2.setColor(new Color(0,161,155));
g2.fillArc(paddingLegend, resY - 150, paddingLegend, paddingLegend, 360, 360);
g2.setColor(new Color(249,178,52));
g2.fillArc(paddingLegend, resY - 120, paddingLegend, paddingLegend, 360, 360);
g2.setColor(new Color(190,22,35));
g2.fillArc(paddingLegend, resY - 90, paddingLegend, paddingLegend, 360, 360);
g2.setColor(new Color(178,178,178));
g2.setFont(g2.getFont().deriveFont( 15F ));
g2.drawString("Occupied / Moving Goods", paddingLegend + 30, resY - 135 );
g2.drawString("Goods idle > 2 days and < 5 days", paddingLegend + 30, resY - 105);
g2.drawString("Goods idle \u2265 5 days", paddingLegend + 30, resY - 75 );
// Capacity Level Title
g2.setFont(g2.getFont().deriveFont( 20F ));
g2.drawString("Capacity Level ", paddingLeftSubTitle + paddingLegend, resYTop + paddingTopSubTitle1 + paddingLegend);
// Goods Movement Title
g2.setFont(g2.getFont().deriveFont( 20F ));
g2.drawString("Goods Movement ", paddingLeftSubTitle + paddingLegend, resYTop + paddingTopSubTitle2 + paddingLegend);
从上面的图片可以看出,圆圈和文字完全模糊,但仓库图像根本不模糊。我试过下面的代码,没有任何改进。
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
如何提高图像渲染质量?
非常感谢
【问题讨论】:
-
需要考虑的事项。缩放 - 一些缩放会导致抗锯齿问题。我还会查看可用的text rending hints,看看它们是否有帮助。也很难知道,但图像似乎受到 JPEG 压缩伪影的影响,但这可能只是捕获本身
-
我在docs.oracle.com/javase/6/docs/api/java/awt/RenderingHints.html 上尝试过文本渲染提示,对我没有任何作用。如何使用缩放,但我已经将 x,y 设置为图像分辨率 1920 X 1080?
-
问题是,你是在缩放图像吗?由于我们所拥有的只是一些脱离上下文的代码和屏幕截图,因此很难知道问题可能出在哪里
-
无缩放。我只是在 x,y 坐标上绘制
-
好吧,我猜不到了,考虑提供一个 runnable example 来证明您的问题
标签: java render graphics2d