2

次のコードを実行すると、「-2」がトレースされ、その理由を理解しようとして頭が混乱しています。

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

私が知る限り、0 をトレースする必要があります。0x32FF6B45 は、座標 0,0 のピクセルに最初に割り当てられます。その値は bmd.getPixel32(0,0) で返される必要があり、0x32FF6B45 から減算すると、結果は 0 になるはずです。どうして -2 になるのでしょうか?

編集:

値を個別にトレースしましたが、0x32FF6B45 をトレースすると 855599941 になり、bmd.getPixel32(0,0) をトレースすると 855599943 になるため、上記のトレースの操作が -2 になるのは理にかなっています。一体、それらの値は異なりますか?bmd.getPixel32(0,0) も 855599941 をトレースしませんか?

4

2 に答える 2

-1

それが予想されます。

getPixel

これは値を返します: #RRGGBB (rgb / red, green, blue)

getPixel32

これは値を返します: #AARRGGBB (argb / alpha, red, green, blue)

例:

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));

結果:

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

私が知る限り、あなたは Flash の範囲外の色を使用しています。色の範囲はわかりませんが、以前の経験から、色の値が範囲外であるためにオブジェクトがインポートに失敗することがありました。

@Jari は透明度についても正しいです。

于 2013-02-19T17:43:12.663 に答える