2011-01-28 6 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コンポーネントの完璧なスクリーンショットを作るために変更する必要がありますか?

答えて

1

ScreenImageクラス(camickrで提案)を比較したところ、問題の原因が見つかりました。 TYPE_INT_ARGBの代わりにTYPE_INT_RGBに設定されたタイプのBufferedImageを作成した場合、そのフォントは問題ありません。

+0

全く同じ問題がありました。 'TYPE_INT_ARGB'では、フォントは醜いものであり、オンスクリーンイメージ(良いフォントを持つ)で始まったアニメーション内で使用すると、すべてのテキストがピクセルシフトされているかのように認識されます。それは実際に 'TYPE_INT_RGB'で解決されます。 (私はパネルの内容をぼかすアニメーションシーケンスで画面上と画像上を使用しているので、まずパネルをバッファに描画させてから、アニメーションのバッファをぼかすようにします)。 – Timmos

0

クラスのロボット

public synchronized BufferedImage createScreenCapture(Rectangle screenRect) 

(アプリは、Windows 7上で実行されていますか)?

+0

残念ながら、コンポーネントが画面に表示されなくても画像をキャプチャする必要があるため、残念ながらそれは機能しません。 – torn

1

スイングコンポーネントの完璧なスクリーンショットを作成するにはどうすればよいですか?

レンダリングのヒントを提供してはいけないと思います。

私はこのためにScreen Imageクラスを使用しています(基本的に、いくつかの他の機能が組み込まれたコードです)。

関連する問題