2010-03-03 2 views
1

J'étudie getPixel32() et les classes Bitmap et Bitmap Data. Fondamentalement, je voudrais savoir comment produire une simple trace d'un ARGB à partir d'une valeur hexadécimale. En passant, je suis sous l'impression, ce que je suppose/j'espère faux, que les valeurs hexadécimales ne peuvent pas produire autant de couleurs que les valeurs RVBA. peut-être "web safe" m'a jeté au large avec la compréhension de l'utilité ou le désir d'utiliser des couleurs produit avec des valeurs hexadécimales.Actionscript 3.0 Traduction HEX en ARGB

Répondre

3

Pour extraire les informations de couleur, vous devez utiliser des opérateurs au niveau du bit. Les couleurs sont stockées comme 0xAARRGGBB, vous devez donc extraire ces parties. Le petit extrait devrait faire l'affaire:

var hex: uint = 0x00ff00ff; 
var a: int = (hex >>> 0x18) & 0xff; 
var r: int = (hex >>> 0x10) & 0xff; 
var g: int = (hex >>> 0x08) & 0xff; 
var b: int = hex & 0xff; 

trace(a, r, g, b); 

Selon la façon dont vous spécifiez les valeurs RVBA, la réponse peut changer. Si vous utilisez des valeurs RVBA où chaque canal est spécifié par un octet, vous pouvez exprimer exactement autant de couleurs que dans une valeur hexadécimale. Votre "valeur hexadécimale" est un entier non signé composé de 4 octets. En Flash il y a aussi le type Number qui consomme 64 bits donc chaque canal serait exprimé en 8 octets au lieu d'un. Vous pouvez imaginer que vous avez beaucoup plus de précision. Cependant, votre écran est probablement défini sur "True Color (32-bit)" et ne pourra pas afficher autant de couleurs. Vous allez même au-delà de la précision double (64bit) et utilisez la précision décimale, qui est principalement utilisée pour les calculs financiers. Chaque valeur est constituée de 128 bits, ce qui donne 16 octets pour chaque canal. C'est 16 fois plus que lorsque vous utilisez votre représentation hexadécimale. Bien sûr, c'est beaucoup plus de précision mais votre moniteur ne sera pas capable de le gérer.

Une note de côté. La taille de votre image est également la largeur hauteur canaux * (octets par canal). Donc, si vous utilisez un octet par canal qui est 8 bits, vous obtenez déjà assez de couleurs. Pour une grande image, la différence est assez importante si vous passez de 8 bits à 32 bits par canal.

Une image 1024x768 avec une précision de 8 bits est 3072kb alors que la même image 32 bits est de 12288kb en mémoire. Cette même image prend 24576kb en utilisant le type de numéro de Flash. Donc, vous êtes probablement mieux de rester avec une précision de 8 bits, ce qui devrait suffire dans la plupart des cas. J'espère que ça aide et que vous comprenez mieux maintenant les images et leur structure.

+0

Je préfère masquer le canal avec lequel je travaille en premier, a = (hex et 0xff000000), puis le déplacer dans la plage, >> 24 pour a. C'est une bonne façon de le faire – avanderw