web-dev-qa-db-ja.com

Java 9hdpiディスプレイのサポート-多重解像度画像-命名規則とWindowsでの読み込み

これらの記事によると:

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"));

しかし、これらの作品はどれもありません(唯一のベース画像がロードされ、ぼやけています)。

これによれば:

https://netbeans.org/bugzilla/show_bug.cgi?id=239745

最初の方法は有望であるはずです。

(SwingまたはJavaFXを使用して)これに関する経験はありますか?何か間違ったことをしているのか、この機能が現在のプレリリースバージョンのJava 9sofar)に実装されていないのかわかりません。


更新:

それは可能であるはずです:

http://openjdk.Java.net/jeps/26

また、次の命名規則を試しました(説明 ここ ):

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 ...のように見えます。

33
Jolinar

HiDPIサポート の一部として、Java 9は Java.awt.MultiResolutionImage インターフェースと Java.awt.image.AbstractMultiResolutionImage et alクラス。Swingではサポートされていますが、この領域には バグ および 誤解 があります。

これらは以前のJavaバージョンには存在しないため、ユーザーが以前のランタイムで引き続き実行できるようにする場合は、通常のImageクラスを使用するコードを作成する必要があります。以前のJREで実行している場合。

それらを使用するには、あなたは 次のようなことをします

  • さまざまな解像度の画像のセットから始めます。

enter image description here

  • 次に、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オブジェクトを使用します。

命名規則については自動的には何もありません。画像の解像度は画像ファイルの内容から取得されます。

5
Bob Jacobsen