Comment décider qui BufferedImage type d'image à utiliser?
Java de la classe BufferedImage a une longue liste de variables de classe connue comme le type d'image qui peut être utilisé comme un argument pour la BufferedImage constructeur.
Cependant, Java docs a fait un minimum d'explications de ce que ces types d'image sont utilisés et comment serait-il sur le BufferedImage être créé.
Ma question est:
- Comment un type d'image affecter la BufferedImage être créé? Il contrôle le nombre de bits utilisés pour stocker différentes couleurs (Rouge,Vert,Bleu) et de sa transparence?
- Qui type d'image doit-on utiliser si nous voulons simplement créer
- opaque image
- une image transparente
- une image translucide
J'ai lu la description dans la Java Doc de nombreuses fois, mais elle n'arrivait pas à comprendre comment l'utiliser. Par exemple, celui-ci:
TYPE_INT_BGR
Représente une image 8 bits RVB composantes de couleur, correspondant à un Windows ou Solaris - style BGR modèle de couleur, avec les couleurs Bleu, Vert, Rouge et emballé dans nombre entier de pixels. Il n'est pas alpha. L'image a une DirectColorModel. Lorsque les données avec les non-opaque alpha est stocké dans une image de ce type, la couleur des données doit être adapté à un non-prémultiplié forme et l'alpha de la jeter, comme décrit dans la AlphaComposite de la documentation.
Je me souviens, je l'ai lu quelque part sur certaines parties de l'image transparente tandis que translucide est sur le réglage de l'opacité de l'ensemble de l'image. Par exemple, un fichier gif permet de transparence, mais pas de transparence, tandis que les fichiers png prend en charge à la fois. C'est un exemple où on peut avoir besoin d'utiliser un autre type d'image. Non?
OriginalL'auteur user3437460 | 2015-09-05
Vous devez vous connecter pour publier un commentaire.
Sauf si vous avez des exigences particulières (par exemple d'économiser la mémoire ou de l'enregistrement des calculs ou un natif le format de pixel) juste aller avec la valeur par défaut
TYPE_INT_ARGB
qui a 8 bits par canal, 3 canaux + alpha.Sauter le canal alpha lorsque l'on travaille avec 8 bits par canal ne pas affecter le total de la mémoire occupée par l'image, puisque chaque pixel sera emballé dans un
int
en tout cas jusqu'à 8 bits seront rejetées.Fondamentalement, vous devez:
TYPE_INT_ARGB
, 4 octets par pixel avec canal alphaTYPE_INT_ARGB_PRE
, 4 octets par pixel, de même qu'avant, mais les couleurs sont déjà multiplié par l'alpha du pixel pour enregistrer les calculsTYPE_INT_RGB
, 4 octets par pixel sans canal alphaTYPE_USHORT_555_RGB
etTYPE_USHORT_565_RGB
, 2 octets par pixel, beaucoup moins de couleurs, n'ont pas besoin de l'utiliser, sauf si vous avez des contraintes de mémoirePuis il y a toutes le même type de formats échangé des canaux (par exemple.
BGR
plutôt queRGB
). Vous devez choisir l'une native de votre plate-forme, de sorte que moins de conversion doit être faite.TYPE_InT_ARGB
pour opaque, transparent & image translucide, sauf si j'ai d'autres besoins spéciaux, comme mentionné par vous?Oui, une image translucide n'est pas translucide en soi (à moins que tous les pixels de l'alpha). Vous pouvez obtenir la translucidité par le dessin de l'image avec alpha blending sur la destination du framebuffer.
Et tant que le type d'image a l'appui pour le canal alpha, il sera en mesure de soutenir la transparence suis-je en droit de dire ça? C'est ma dernière question! 😀
OriginalL'auteur Jack