2011-01-28 96 views
0

當我將Swing組件呈現給圖像時,字體不同,然後組件在屏幕上呈現。這裏是一個圖像顯示的區別:組件繪成圖像呈現醜陋的字體

enter image description here

這是代碼:

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上運行)

回答

1

比較ScreenImage類(由camickr建議)後,我發現問題的原因。如果我創建一個類型設置爲TYPE_INT_RGB而不是TYPE_INT_ARGB的BufferedImage,則字體很好。

+0

有完全相同的問題。使用`TYPE_INT_ARGB`時,字體很難看,並且在使用屏幕圖像(具有良好字體)開始的動畫中使用時,它被認爲是所有文本都是像素移動的。它確實通過`TYPE_INT_RGB`解決。 (我在屏幕上和圖像中使用了模糊面板內容的動畫序列,因此我先讓面板繪製到緩衝區,然後開始模糊動畫中的緩衝區)。 – Timmos 2016-05-11 08:55:39

0

類機器人

public synchronized BufferedImage createScreenCapture(Rectangle screenRect) 

+0

不幸的是,即使組件在屏幕上不可見,我也不需要捕獲圖像。 – torn 2011-01-29 07:52:14

1

我應該怎樣改變才能製作Swing組件的完美屏幕截圖?

我想你應該不會提供渲染提示。

我使用Screen Image這個類(它基本上是你的代碼,內置了一些其他功能)。