2013-02-19 2 views
2

Lors de l'exécution du code suivant, "-2" est tracé et je me casse la tête en essayant de comprendre pourquoi.Obtention d'une trace inattendue pour getpixel32. Quelqu'un peut-il voir pourquoi?

var bmd:BitmapData = new BitmapData(1,1,true,0xFFFFFFFF); 
bmd.setPixel32(0,0, 0x32FF6B45); 
trace(0x32FF6B45-bmd.getPixel32(0,0)); 

Pour autant que je peux dire, il faut tracer 0. 0x32FF6B45 est d'abord affecté au pixel à coords 0,0. Cette valeur devrait être retournée dans bmd.getPixel32 (0,0) et ensuite, quand elle est soustraite de 0x32FF6B45, elle devrait aboutir à 0. Pourquoi diable ai-je -2?

EDIT:

J'ai retracé les valeurs individuellement et il est logique que l'opération dans la trace ci-dessus donne -2 parce que le suivi des résultats 0x32FF6B45 à 855.599.941 et tracer bmd.getPixel32 (0,0) résultats dans 855599943. La question est maintenant pourquoi diable sont ces valeurs différentes? Whey ne bmd.getPixel32 (0,0) trace également 855599941?

Répondre

-1

C'est prévu.

getPixel

Ceci renvoie une valeur: #RRGGBB (rgb/rouge, vert, bleu)

getPixel32

Cela renverra une valeur: # AARRGGBB (argb/alpha, rouge, vert, bleu)

Exemple:

trace('test 0x32FF6B45: '+0x32FF6B45); 
var bmd:BitmapData = new BitmapData(1,1,true,0xFFFFFFFF); 
trace('setting 0,0 to 0x32FF6B45'); 
bmd.setPixel32(0,0, 0x32FF6B45); 
var color:* = bmd.getPixel32(0,0) 
trace('0,0: '+color); 
trace(color-bmd.getPixel32(0,0)); 

Résultats:

test 0x32FF6B45: 855599941 
setting 0,0 to 0x32FF6B45 
0,0: 855599943 
0 

D'après ce que je peux dire, vous utilisez une couleur qui est hors des limites du terrain Flash. Je ne suis pas sûr de la gamme de couleurs, mais je sais que lors d'expériences antérieures lors de la prise d'éléments Photoshop avec de nombreuses couleurs, des objets ont parfois échoué à importer car la valeur de couleur était hors limites.

@Jari a également raison concernant la transparence.

1

J'ai le même problème, et je crois qu'il est lié à l'alpha prémultiplié, comme described here. Dans mon code, je définissais un pixel à 0xa08800ff et revenait à 0xa08700ff. Si vous avez besoin d'alphas autres que 0xff, il peut être nécessaire de stocker simultanément toutes les valeurs de vos pixels dans une structure de données séparée.

Questions connexes