2012-08-29 84 views
1

我想將位圖的像素複製到BitmapData的透明度可以說.5,但我似乎無法在谷歌或這裏的任何地方找到任何引用!AS3位圖數據CopyPixel與阿爾法

我有我的標準拷貝像素代碼

_bitmapData.copyPixels(_bitmaps.vault[BitmapNames.BITMAPNAME], SCREENRECT, _drawPoint, null, null, true);

我可以看到,第一個空值我通過是BitmapData標記alphaBitmapData:BitmapData所以我假定它有東西做,但我不能解決它!

任何幫助將不勝感激,歡呼!

回答

1

我已經接受了Will Kru的答案作爲答案(儘管只有理論基礎),下面是用於將方法置於瘋狂背後的代碼!

var alphaBitmap:BitmapData = new BitmapData(width, height, true, toARGB(0x000000, (.5 * 255)));

_bitmapData.copyPixels(_bitmaps.vault[BitmapNames.BITMAP], _drawRect, _drawPoint, alphaBitmap, null, true);

toARGB功能這裏alpha + RGB -> ARGB?

+1

是的,這也可以。複製像素將從您傳遞給第一個參數的位圖中獲取顏色值,並從您傳遞給第四個參數的位圖中獲取alpha值。在我的答案中,我假定你的sourcebitmap將包含alpha值,所以你可以將它用於兩個參數。 –

4

正在關注this link你會發現一些關於變量的解釋。

簡而言之,當您將最後一個參數(mergeAlpha:Boolean)設置爲true時,函數會在複製像素時考慮第四個參數(alphaBitmap:BitmapData),有效地使用alphaBitmap的alpha來合併複製像素。因此,您應該將用於第一個參數的相同位圖傳遞給第四個參數,並相應地設置第五個參數(alphaPoint:Point),並將最後一個參數設置爲true。

+0

發現原來你只能在創建定義位圖的Alpha。我想將位圖複製到位於第1幀的.5透明度處的另一個BitmapData,然後在第2幀處,當我重繪整個位圖時,我想將它繪製在.4處的BitmapData上,然後.3 .....(作爲例如),但從我可以從您發佈的artical中取消,你不能這樣做? – rorypicko

+0

您只需將原始位圖保留在內存中,然後使用這些位圖在每一幀中使用所需的alpha值重新創建所需的位圖。 –

+0

我在內存中存儲,我不知道如何將理論應用到代碼中。我現在已經完成了!像這樣的工作 var test:BitmapData = new BitmapData(_drawRect.width,_drawRect.height,true,toARGB(0x000000,(.5 * 255))); \t \t \t \t _bitmapData.copyPixels(_bitmaps.vault [BitmapNames.LEAPJUMPLINE],_drawRect,_drawPoint,test,null,true); (rgb:uint,newAlpha:uint):uint { \t \t var argb:uint = 0; \t \t argb =(rgb); \t \t argb + =(newAlpha << 24); \t \t return argb; }' – rorypicko