Java 9 Multi-Resolution Image API: Simplifique Gráficos Responsivos
Com o Java 9, uma nova Multi-Resolution Image API foi introduzida, suportando múltiplas imagens com variantes de resolução diferentes. Esta API permite que um conjunto de imagens com diferentes resoluções seja usado como uma única imagem multiresolução. Principais operações:
Image getResolutionVariant(double destImageWidth, double destImageHeight)- Obtém a imagem específica que é a melhor variante para representar esta imagem lógica no tamanho indicado.List<Image> getResolutionVariants()- Obtém lista legível de todas as variantes de resolução.
Exemplo
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<>();
for (String url : imgUrls) {
images.add(ImageIO.read(new URL(url)));
}
// Lê todas as imagens em uma imagem multiresolução
MultiResolutionImage multiResolutionImage = new BaseMultiResolutionImage(
images.toArray(new Image[0]));
// Obtém todas as variantes
List<Image> variants = multiResolutionImage.getResolutionVariants();
System.out.println("Total de imagens: " + variants.size());
for (Image img : variants) {
System.out.println(img);
}
// Obtém variante específica para cada tamanho indicado
Image variant1 = multiResolutionImage.getResolutionVariant(156, 45);
System.out.printf("\nImagem para destino[%d,%d]: [%d,%d]", 156, 45, variant1.getWidth(null), variant1.getHeight(null));
Image variant2 = multiResolutionImage.getResolutionVariant(311, 89);
System.out.printf("\nImagem para destino[%d,%d]: [%d,%d]", 311, 89, variant2.getWidth(null), variant2.getHeight(null));
Image variant3 = multiResolutionImage.getResolutionVariant(622, 178);
System.out.printf("\nImagem para destino[%d,%d]: [%d,%d]", 622, 178, variant3.getWidth(null), variant3.getHeight(null));
Image variant4 = multiResolutionImage.getResolutionVariant(300, 300);
System.out.printf("\nImagem para destino[%d,%d]: [%d,%d]", 300, 300, variant4.getWidth(null), variant4.getHeight(null));
}
}
Saída
Total de imagens: 3
BufferedImage@7ce6a65d: type = 6 ColorModel: #pixelBits = 32 numComponents = 4 color space =java.awt.color.ICC_ColorSpace@548ad73b transparency = 3 has alpha = true isAlphaPre = false ByteInterleavedRaster: width =311 height = 89 #numDataElements 4 dataOff[0] = 3
BufferedImage@4c762604: type = 6 ColorModel: #pixelBits = 32 numComponents = 4 color space =java.awt.color.ICC_ColorSpace@548ad73b transparency = 3 has alpha = true isAlphaPre = false ByteInterleavedRaster: width =156 height = 45 #numDataElements 4 dataOff[0] = 3
BufferedImage@2641e737: type = 6 ColorModel: #pixelBits = 32 numComponents = 4 color space =java.awt.color.ICC_ColorSpace@548ad73b transparency = 3 has alpha = true isAlphaPre = false ByteInterleavedRaster: width =622 height = 178 #numDataElements 4 dataOff[0] = 3
Imagem para destino[156,45]: [311,89]
Imagem para destino[311,89]: [311,89]
Imagem para destino[622,178]: [622,178]
Imagem para destino[300,300]: [622,178]
A API seleciona automaticamente a melhor variante de resolução para o tamanho de destino solicitado, ideal para UIs responsivas e HiDPI.
Java
- Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
- Comentários em Java: Tipos, Uso e Boas Práticas
- Dominando o Loop for Aprimorado em Java: Sintaxe, Exemplos e Boas Práticas
- Dominando Strings em Java: Criação, Métodos e Boas Práticas
- Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
- Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
- Dominando Try-With-Resources em Java: Gerenciamento Automático de Recursos Explicado
- Anotações em Java Explicadas: Tipos, Posicionamento e Exemplos Práticos
- Asserções em Java: Guia Prático para Detectar Bugs e Garantir Confiabilidade do Código
- Java 9 (JDK 9) – Principais Recursos e Benefícios