2012-05-02 3 views
0

У меня возникла проблема с копированием только замаскированных пикселей из одного растрового изображения в другое. В основном я маскирую растровое изображение A с растровым изображением B, которое отлично работает, но я не уверен, как копировать только маскированные пиксели в Bitmap C, который я хочу сохранить только.AS3 копирование замаскированного растрового изображения на другое растровое изображение

//all this works fine 

var _texture:Bitmap = new Bitmap(new Dirt_Bitmap);  
var _mask:Bitmap = new Bitmap(new Mask_Bitmap);  
var _planter:Bitmap = new Bitmap(new Planter_Bitmap); 

_texture.cacheAsBitmap = _mask.cacheAsBitmap = true; 
_texture.mask = _mask; 

//This is where things get weird :[ 

var newBitmap:Bitmap = new Bitmap(new BitmapData(50, 50, true)); 
newBitmap.bitmapData.copyPixels(_texture.bitmapData, _texture.bitmapData.rect, new Point()); 

_planter.bitmapData.copyPixels(_newBitmap.bitmapData, _newBitmap.bitmapData.rect, new Point()); 

как бы я идти о просто копирование или рисунка или, может быть, MERG() просто замаскированной текстуры поэтому его скопировали над плантатора графики, где грязь должна быть? Любая помощь будет принята с благодарностью! :]

ответ

1

Когда вы используете copyPixels, вы на самом деле копируете содержимое растрового изображения без того, что добавлено средой (без маскировки или преобразований).

Используйте вместо этого draw().

Вот пример:

var texture:Bitmap = new Bitmap(new BitmapData(200, 200, false, 0xFFFF0000));  
var imageMask:Bitmap = new Bitmap(new BitmapData(200, 200, true, 0)); 
var rect:Rectangle = new Rectangle(0, 0, 10, 10); 
imageMask.bitmapData.fillRect(rect, 0xFF000000); 
rect.x = 50; 
rect.y = 50; 
imageMask.bitmapData.fillRect(rect, 0xFF000000); 

texture.cacheAsBitmap = true; 
imageMask.cacheAsBitmap = true; 
texture.mask = imageMask; 

addChild(imageMask); 
addChild(texture); 

var planter:Bitmap = new Bitmap(new BitmapData(200, 200, true, 0)); 

// that's it 
planter.bitmapData.draw(texture); 

addChild(planter); 
planter.x = 100; 
+0

спасибо Nox! я должен был сделать шаг дальше Draw() - замаскированное растровое изображение на temp Sprite, затем я использовал Draw(), чтобы скопировать все на плантатор, чтобы придать иллюзию грязи, помещенной в плантатор. Еще раз спасибо! – user1369030

Смежные вопросы