Comment une image 32bpp (ARGB) pourrait-elle être convertie en une image 16bpp (ARGB) en utilisant les bibliothèques Java? Pour ma curiosité, au niveau du pixel, que fait cette conversion? Si j'ai une valeur int qui contient la valeur d'un pixel (avec tous les canaux), comment cet entier serait-il différent après la conversion?Conversion d'une image 32bpp en une image 16bpp en Java
Répondre
Une valeur AARRGGBB 32 bits converti en une valeur ARVB 16 bits serait quelque chose comme ceci:
int argb = ((aarrggbb & 0x000000F0) >> 4)
| ((aarrggbb & 0x0000F000) >> 8)
| ((aarrggbb & 0x00F00000) >> 12)
| ((aarrggbb & 0xF0000000) >> 16);
Il colle tout dans les 16 bits inférieurs et laisse les 16 bits supérieurs comme 0.
Pour chaque canal, vous perdez les 4 bits les plus bas de l'info couleur, les plus hauts étant un peu plus importants. Les couleurs seraient quantifiées à la valeur équivalente à 4 bits la plus proche, ce qui se traduirait par un effet de bande de couleur visuellement désagréable à travers l'image. Incidemment, la couleur 16 bits n'inclut normalement pas de composante alpha. Normalement (mais pas toujours) il se décompose en 5 bits pour le rouge, 6 bits pour le vert (puisque nos yeux sont plus sensibles aux couleurs vert/bleu) et 5 bits pour le bleu. Cette conversion perdrait seulement 2 ou 3 bits d'information sur chaque canal au lieu de 4, et supposerait que le pixel source ne contenait pas d'alpha.
Lisez l'image et enregistrez-la dans le format dont vous avez besoin. De http://www.exampledepot.com/egs/javax.imageio/Graphic2File.html
// Create an image to save
RenderedImage rendImage = myCreateImage();
// Write generated image to a file
try {
// Save as PNG
File file = new File("newimage.png");
ImageIO.write(rendImage, "png", file);
// Save as JPEG
file = new File("newimage.jpg");
ImageIO.write(rendImage, "jpg", file);
} catch (IOException e) {
}
Voir la sortie de javax.imageio.ImageIO.getWriterFormatNames() pour localiser le format dont vous avez besoin.
La représentation interne de chaque pixel ne change pas (sauf pour la perte de représentation) lors de l'utilisation de 16 bpp, mais les octets stockés sur le disque seront.
Comment est-ce que sauvegarder une image en png ou jpeg m'aide? – Geo
Il est logique de parler de 16 bpp sur les fichiers image. Java utilise des images non compressées en mémoire. Si la réponse n'a pas de sens, vous pouvez reformuler la question. –
- 1. Conversion d'un HtmlElement en une image?
- 2. Conversion d'une matrice de pixels en une image en C#
- 3. Conversion Inplace de bitmap 24bpp en 32bpp
- 4. Conversion de texte en image-message?
- 5. Conversion d'une image Picture Box en Byte Array en VB6
- 6. Conversion d'un texte hébreu en image en utilisant imagemagick
- 7. Convertir une image en XAML?
- 8. Découpe une image en mosaïques
- 9. Comment convertir une image Pyglet en image PIL?
- 10. Modifier une image dans java
- 11. Ajout d'une image à une base de données en Java
- 12. Comment obtenir une image date créée en Java
- 13. Comment extraire une partie de cette image en Java?
- 14. Écrire des métadonnées dpi à une image jpeg en Java
- 15. image en utilisant .ashx
- 16. Convertir JPanel en image
- 17. Trouver une image dans une image C#
- 18. Trouver une Image dans une Image
- 19. Comment envoyer une image dans Java ME?
- 20. En cliquant sur une image pour l'agrandir
- 21. Comment copier une image distante en python?
- 22. sauver page ASPX en une image
- 23. Java: utiliser WritableRaster.setRect pour superposer une image?
- 24. Récupérer une image du web dans java
- 25. Accéder à une image dans une image
- 26. Conversion CPP en Java
- 27. Java: créer une image de qualité médiocre
- 28. Insérer une image dans Excel - Java
- 29. Enregistrer le fichier image avec le dialogue en utilisant java
- 30. Comment saisir un octet [] d'une image en java?
Merci pour l'explication détaillée! – Geo