Java 绘制为图像的组件使用难看的字体渲染
当我将Swing组件渲染到图像时,字体与在屏幕上渲染该组件时不同。下面是一张显示差异的图像: 这是代码:Java 绘制为图像的组件使用难看的字体渲染,java,windows,swing,fonts,Java,Windows,Swing,Fonts,当我将Swing组件渲染到图像时,字体与在屏幕上渲染该组件时不同。下面是一张显示差异的图像: 这是代码: public static BufferedImage renderComponent(Component component) { int width = component.getWidth(); int height = component.getHeight(); BufferedImage buffImage = new BufferedImage(wid
public static BufferedImage renderComponent(Component component) {
int width = component.getWidth();
int height = component.getHeight();
BufferedImage buffImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = (Graphics2D) buffImage.getGraphics();
g.setFont(component.getFont());
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
component.paint(g);
g.dispose();
return buffImage;
}
我应该改变什么来制作一个完美的Swing组件屏幕截图?(该应用程序在Windows 7上运行)Class Robot
public synchronized BufferedImage createScreenCapture(Rectangle screenRect)
?
我应该改变什么来制作一个完美的Swing组件屏幕截图
我想你不应该提供渲染提示
我使用这个类(它基本上是您的代码,内置了一些其他功能)。在比较ScreenImage类(由camickr建议)之后,我找到了问题的原因。如果我创建的BuffereImage的类型设置为type_INT_RGB而不是type_INT_ARGB,那么字体就可以了。不幸的是,这不起作用,因为即使组件在屏幕上不可见,我也需要捕获图像。问题与此完全相同。使用
TYPE_INT_ARGB
,字体很难看,当在以屏幕图像(具有良好字体)开始的动画中使用时,会感觉到所有文本都是像素移位的。它确实是用TYPE\u INT\u RGB
解决的。(我在动画序列中使用屏幕和图像,使面板内容模糊,因此我让面板先绘制到缓冲区,然后开始在动画中模糊缓冲区)。