これらの記事によると:
http://news.kynosarges.org/2015/06/29/javafx-dpi-scaling-fixed
https://Twitter.com/michaelsamarin/status/729234779292483584
Java 9は、Swingで高DPIディスプレイ(自動DPIスケーリング)をサポートする必要があります。 Java 9 Early Access + on Zulu 9 の最後のバージョンでテストしましたが、動作し、非常に見栄えがします。
高解像度/網膜画像の読み込みという1つのことしか解決できませんでした。
上下の記事(リンク)によると、 Appleの命名規則 (@ 2x)を使用する必要があります:
image.png
、[email protected]
、[email protected]
など。
これらの読み込み方法をテストしました:
Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("something/image.png"));
そして
ImageIO.read(getClass().getResource("/something/image.png"));
しかし、これらの作品はどれもありません(唯一のベース画像がロードされ、ぼやけています)。
これによれば:
最初の方法は有望であるはずです。
(SwingまたはJavaFXを使用して)これに関する経験はありますか?何か間違ったことをしているのか、この機能が現在のプレリリースバージョンのJava 9sofar)に実装されていないのかわかりません。
更新:
それは可能であるはずです:
また、次の命名規則を試しました(説明 ここ ):
Windows : image.scale-<dpi-value>.png (image.scale-140.png)
Linux : image.Java-scale2x.png
Mac : [email protected] and image.Java-scale2x.png
しかし、私は実用的な解決策や公式情報を見つけることができません。わかりません-hdpiディスプレイは今日一般的であり、Javaアプリケーションはs ...のように見えます。
HiDPIサポート の一部として、Java 9は Java.awt.MultiResolutionImage インターフェースと Java.awt.image.AbstractMultiResolutionImage et alクラス。Swingではサポートされていますが、この領域には バグ および 誤解 があります。
これらは以前のJavaバージョンには存在しないため、ユーザーが以前のランタイムで引き続き実行できるようにする場合は、通常のImageクラスを使用するコードを作成する必要があります。以前のJREで実行している場合。
それらを使用するには、あなたは 次のようなことをします :
次に、MultiResolutionImageを作成してロードします。
List<Image> imgList = new ArrayList<Image>();
imgList.add(ImageIO.read(new File("320px-Eagle.jpg"));
imgList.add(ImageIO.read(new File("800px-Eagle.jpg"));
imgList.add(ImageIO.read(new File("1024px-Eagle.jpg"));
imgList.add(ImageIO.read(new File("1280px-Eagle.jpg"));
imgList.add(ImageIO.read(new File("Eagle.jpg"));
MultiResolutionImage mrImage = new BaseMultiResolutionImage(imgList.toArray(new Image[0]));
他の画像と同じようにmrImage
オブジェクトを使用します。
命名規則については自動的には何もありません。画像の解像度は画像ファイルの内容から取得されます。