Apple の Java 6 では、同じイメージの複数のバージョンを提供できます。画面 (網膜かどうか) に応じて、いずれかの画像が選択されて描画されます。
ただし、これらの画像は特別な方法でロードする必要があります。
Toolkit.getDefaultToolkit().getImage("NSImage://your_image_name_without_extension");
たとえば、(通常の解像度の) 画像の名前が「scissor.png」の場合、高解像度バージョンの「scissor@2x.png」を作成し ( Apple の命名規則に従って)、両方の画像を次のResources
ディレクトリに配置する必要があります。アプリ バンドル (はい、アプリをバンドルする必要があります)。次に呼び出します。
Image img = Toolkit.getDefaultToolkit().getImage("NSImage://scissor");
結果の画像をボタンで使用すると、適切な解像度で魔法のように描画されます。
他に使用できる「トリック」が 2 つあります。
- Image を描画する前に、Graphics2D オブジェクトで (0.5, 0.5) の AffineTransform を使用します。このJava-devメッセージも参照してください
- このハックを使用してプログラムで画像の高 dpi バージョンを作成する
最初の「トリック」(0.5 スケーリング) は、Oracle の Java 7/8 でも動作します。つまり、コンポーネントの Graphics オブジェクトに 0.5 のスケーリングで画像を直接描画すると、Retina ディスプレイで高解像度で (元のサイズの半分でも) レンダリングされます。
アップデート
Java 9 以降では、MultiResolutionImageインターフェースを介して、さまざまな解像度の画像に対するより優れた組み込みサポートがあります。詳細については、この回答を参照してください。