Java 9マルチ解像度イメージAPI:レスポンシブグラフィックスを簡素化
Java 9では、異なる解像度のバリエーションを持つ複数の画像をサポートする新しいマルチ解像度イメージAPIが導入されました。このAPIにより、異なる解像度の画像セットを単一のマルチ解像度イメージとして扱えます。主な操作は以下の通りです。
- Image getResolutionVariant(double destImageWidth, double destImageHeight) - 指定サイズでこの論理イメージを最もよく表すバリアント画像を取得
- List<Image> getResolutionVariants() - すべての解像度バリアントの読み取り可能なリストを取得
使用例
import java.io.IOException;
import java.net.URL;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;
import java.awt.Image;
import java.awt.image.MultiResolutionImage;
import java.awt.image.BaseMultiResolutionImage;
import javax.imageio.ImageIO;
public class Tester {
public static void main(String[] args) throws IOException, MalformedURLException {
List<String> imgUrls = List.of(
"https://www.tutorialspoint.com/java9/images/logo.png",
"https://www.tutorialspoint.com/java9/images/mini_logo.png",
"https://www.tutorialspoint.com/java9/images/large_logo.png");
List<Image> images = new ArrayList<Image>();
for (String url : imgUrls) {
images.add(ImageIO.read(new URL(url)));
}
// すべての画像を1つのマルチ解像度イメージに統合
MultiResolutionImage multiResolutionImage = new BaseMultiResolutionImage(
images.toArray(new Image[0]));
// すべてのバリアントを取得
List<Image> variants = multiResolutionImage.getResolutionVariants();
System.out.println("Total number of images: " + variants.size());
for (Image img : variants) {
System.out.println(img);
}
// 指定サイズに最適なバリアントを取得
Image variant1 = multiResolutionImage.getResolutionVariant(156, 45);
System.out.printf("\nImage for destination[%d,%d]: [%d,%d]",
156, 45, variant1.getWidth(null), variant1.getHeight(null));
Image variant2 = multiResolutionImage.getResolutionVariant(311, 89);
System.out.printf("\nImage for destination[%d,%d]: [%d,%d]",
311, 89, variant2.getWidth(null), variant2.getHeight(null));
Image variant3 = multiResolutionImage.getResolutionVariant(622, 178);
System.out.printf("\nImage for destination[%d,%d]: [%d,%d]",
622, 178, variant3.getWidth(null), variant3.getHeight(null));
Image variant4 = multiResolutionImage.getResolutionVariant(300, 300);
System.out.printf("\nImage for destination[%d,%d]: [%d,%d]",
300, 300, variant4.getWidth(null), variant4.getHeight(null));
}
}
出力
Total number of images: 3 BufferedImage@7ce6a65d: type = 6 ColorModel: #pixelBits = 32 ... BufferedImage@4c762604: type = 6 ColorModel: #pixelBits = 32 ... BufferedImage@2641e737: type = 6 ColorModel: #pixelBits = 32 ... Image for destination[156,45]: [311,89] Image for destination[311,89]: [311,89] Image for destination[622,178]: [622,178] Image for destination[300,300]: [622,178]
指定サイズに最も適した解像度の画像が自動選択されることがわかります。
Java
- Java演算子をマスター:種類、構文、実践例
- Javaコメント:種類、使い方、ベストプラクティス
- Java拡張forループをマスター:構文、例、ベストプラクティス
- Java文字列をマスター:生成、メソッド、ベストプラクティス
- Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
- Java無名インナークラス完全ガイド:定義、構文、実践例
- Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
- Javaアノテーション完全ガイド:種類、配置場所、実践例
- Javaアサーション完全ガイド:バグ早期発見とコード信頼性の向上
- Java 9(JDK 9)の主要機能とメリット
- Java 9プロセスAPIの改善:ProcessHandleで詳細情報取得