我正在用Java创建具有用透明背景写在其上的字体的图像。我使字体不同的颜色和不同类型的字体样式,所以我需要程序是动态的。问题在于我使用Graphics2D并使用g2d.drawString()写入缓冲图像,并且图像几乎不是我正在寻找的定义。我已经尝试创建大字体大小的图像,然后缩小比例,但这也不起作用。我也已将所有可能的渲染提示设置为最高定义。我希望像素密度足够高,以至于如果您将它与视网膜屏幕上的常规文字进行比较,则没有多大区别。谢谢。如何在Java中创建自定义高清图像
-1
A
回答
2
要在Java中拥有“视网膜”质量的图像,您必须在两个维度上创建并渲染您的BufferedImage
正常尺寸的2倍(这将使图像大4倍,我认为这是@MadProgrammer的含义) 。
然后,您必须不下采样(或“规模”)在Java中的形象,而是保持BufferedImage
在全尺寸的,只有一半大小绘制图像的原生支持Graphics2D
实例。 Graphics
传递给paint()
或paintComponent()
对象的AWT或Swing组件的方法通常是正常的(而不是来自BufferedImage.get/createGraphics()
的那个)。
我用这样的代码的成功:
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
AffineTransform xform = AffineTransform.getScaleInstance(.5, .5);
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2.drawImage(image, xform, null); // image being @2x or "retina" size
}
但是,请注意,由于现代计算机上的字体渲染使用"sub pixel antialiasing" or "sub pixel rendering",这是特定于您所呈现的屏幕设备(见链接,但基本上,RGB模式或“布局”因设备而异)。这意味着BufferedImage
通常不能使用亚像素渲染,因此字体看起来不那么清晰。如果要渲染到单个LCD屏幕,则可以指定RenderingHints.TEXT_ANTIALIAS_LCD_*
渲染提示中的一个以获得更好的结果。
相关问题
- 1. 如何使用图像库在java中创建自定义JButton?
- 2. 如何在java中创建自定义光标图像
- 3. 如何创建像自定义列表视图的自定义图像视图?
- 4. 在java中创建自定义图像格式
- 5. 如何使用自定义图像在Swift中创建警报?
- 6. 如何在Android Studio中创建自定义图像按钮?
- 7. 如何在php中使用自定义文本创建图像?
- 8. 如何在Sharepoint 2007中创建自定义清单?
- 9. 如何在default.vcl清漆中创建自定义函数?
- 10. 如何在高图中创建自适应的自定义标签
- 11. 如何在xcode中创建可定制的自定义地图图像?
- 12. 如何创建像图像一样的自定义按钮
- 13. 自定义PDF创建 - 大图像
- 14. 创建具有自定义图像帧
- 15. 如何在崇高文字2中创建自定义布局?
- 16. 如何在Android的自定义视图中创建自定义视图?
- 17. 创建自定义头像
- 18. 如何在内置图像的打开图层中创建自定义控件?
- 19. 如何在自定义类中创建自定义IBActions?
- 20. 在Winforms中创建自定义图形
- 21. 在Android中创建自定义视图
- 22. 在iOS中创建自定义视图
- 23. 在CSS中创建自定义图形?
- 24. 如何在Google地图中创建自定义地图?
- 25. 如何在Xamarin Forms中创建自定义可绑定视图?
- 26. 如何创建自定义)
- 27. 如何在狮身人面像中创建自定义指令
- 28. 如何在java中创建自定义注释?
- 29. 如何在JAVA中使用逻辑创建自定义注释
- 30. 如何在Java中创建自定义异常?
据我所知,Retina分辨率是通过缩小图像大约4倍来实现的。因此,您需要决定目标分辨率并将图像缩放4倍,渲染您的输出并将其缩小4倍......我认为...当您说从.createGraphics()获取图形对象isn时,会出现 – MadProgrammer