Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绘制为图像的组件使用难看的字体渲染_Java_Windows_Swing_Fonts - Fatal编程技术网

Java 绘制为图像的组件使用难看的字体渲染

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

当我将Swing组件渲染到图像时,字体与在屏幕上渲染该组件时不同。下面是一张显示差异的图像:

这是代码:

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
解决的。(我在动画序列中使用屏幕和图像,使面板内容模糊,因此我让面板先绘制到缓冲区,然后开始在动画中模糊缓冲区)。