programación practicas paquetes nomenclatura nombres nombre nombrar nombrado métodos metodos lenguaje convención constantes como buenas java image swing retina hdpi

practicas - Soporte para pantalla hdpi de Java 9-imágenes de resolución múltiple-convención de nombres y carga en Windows



nomenclatura de variables (1)

Según estos artículos:

http://news.kynosarges.org/2015/06/29/javafx-dpi-scaling-fixed
https://twitter.com/michaelsamarin/status/729234779292483584

Java 9 debería admitir pantallas de PPP altas (escalado automático de PPP) en Swing. Lo probé en la última versión de Java 9 Early Access + en Zulu 9 y funciona y se ve muy bien.

No pude resolver solo una cosa: carga de imágenes de alta resolución / retina.

De acuerdo con los artículos (enlaces) de arriba y abajo, debe usar una convención de nombres de Apple ( @ 2x ):

image.png , [email protected] , [email protected] , etc.

He probado estos métodos de carga:

Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("something/image.png"));

y

ImageIO.read(getClass().getResource("/something/image.png"));

Pero ninguno de estos trabajos (la única imagen base estaba cargada y borrosa).

De acuerdo a esto:

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

El primer método debe ser prometedor.

¿Alguien ha tenido alguna experiencia con esto (usando Swing o incluso JavaFX)? No estoy seguro de si estoy haciendo algo mal o esta característica no está implementada en la versión actual de prelanzamiento de Java 9 sofar.

Actualizar:

Debería ser posible:

http://openjdk.java.net/jeps/263

También he intentado seguir las convenciones de nomenclatura (descritas here ):

Windows : image.scale-<dpi-value>.png (image.scale-140.png) Linux : image.java-scale2x.png Mac : [email protected] and image.java-scale2x.png

Sin embargo, no puedo encontrar ninguna solución de trabajo o información oficial. No lo entiendo - las pantallas de hdpi son comunes hoy en día y las aplicaciones de Java se ven como s ... en ellas.


Como parte del soporte de HiDPI , Java 9 introdujo el soporte de resolución múltiple a través de la interfaz java.awt.MultiResolutionImage y las clases java.awt.image.AbstractMultiResolutionImage y otros. A pesar de que son compatibles con Swing, ha habido bugs y misunderstandings en esta área.

Esos no existen en versiones anteriores de Java, por lo que si desea que sus usuarios puedan continuar ejecutándose con tiempos de ejecución anteriores, tendrá que escribir código para usar clases de imagen normales cuando se ejecute en JRE anteriores.

Para usarlos, haces algo como :

  • Comience con un conjunto de imágenes con diferentes resoluciones:

  • Luego crea y carga el 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]));

  • Usa el objeto mrImage como cualquier otra imagen.

La convención de nomenclatura no tiene nada automático: la resolución de la imagen se toma del contenido del archivo de imagen.