我有一個透明的BitmapData對象(sourceBitmapData參數)。每次我使用copyPixels()將它複製到另一個BitmapData對象時,透明像素會替換下面的任何對象。我希望copyPixels()函數簡單地忽略這些完全透明的像素(0x00),而不是複製它們。如何設置copyPixels忽略透明像素?
任何想法?
順便說一句,我試着將alphaMerge設置爲true,但是這並沒有解決問題 - 整個源對象只是變黑,而忽略了所有的透明度。
編輯:
這裏是代碼段;
var b:UIComponent = new UIComponent();
b.graphics.beginFill(color, opacity);
b.graphics.drawCircle(size * 2, size * 2, size);
b.graphics.endFill();
shape = new BitmapData(size * 4, size * 4, true, 0x00FFFFFF);
shape.draw(b);
rect = new Rectangle(0, 0, size * 4, size * 4);
shape.applyFilter(shape, rect, new Point(0, 0), new BlurFilter(20, 20));
它創建一個圖形對象(在這種情況下爲圓形)並將其複製到源位圖,然後應用模糊濾鏡。
drawBuffer.copyPixels(shape, rect, pnt, null, null, false);
之後,它將結果圖像多次應用於drawBuffer。如果alphaMerge被設置爲true,形狀看起來就像一個黑色的blob - 似乎所有的alpha信息都被忽略,並且alpha值被設置爲0xFF(注意:這是基於它的外觀的推測,我沒有驗證它)。另一方面,如果alphaMerge設置爲false,則透明度將全部覆蓋,除了覆蓋它下面的任何內容(drawBuffer中的像素)爲透明像素。
以防萬一你需要drawBuffer以及代碼:
drawBuffer = new BitmapData(bitmapData.width, bitmapData.height, true, 0);
drawCanvas.graphics.beginBitmapFill(drawBuffer, null, false, true);
drawCanvas.graphics.drawRect(0, 0, drawBuffer.width, drawBuffer.height);
drawCanvas.graphics.endFill();
alphaMerge應該這樣做。你確定圖像是透明的32位嗎?你能向我們展示目標和源BMD的代碼嗎? – 2011-03-17 23:56:12
如果您將源位圖數據的位圖繪製到目標位置,該怎麼辦?這將考慮到透明度。 – alxx 2011-03-18 09:40:12
你的意思是BitmapData.draw()?對於我所需要的,它太慢了。 – Joe 2011-03-18 10:11:26