我想使用3位图来创建1个结果位图。第一个是背景。第二个应在面具的帮助下绘制在第一个的顶部
图像被加载到Bitmap
/ BitmapData
个对象中。
示例:
(红绿图像是面具,红色是可见部分)
back mask source result
那我怎么能这样做?我在ActionScript-3中使用什么绘图功能?
感谢您的帮助!
修改
(我的第一个工作解决方案,仅适用于纯红色,绿色或蓝色)
var back: BitmapData = // load the back image
var mask: BitmapData = // load the mask image
var source:BitmapData = // load the source image (32-bit)
var result:BitmapData = back.clone();
// clone source because it will be modified in next step
var source2: BitmapData = source.clone();
// red of the mask becomes the alpha channel of source2
source2.copyChannel(mask, new Rectangle(0, 0, mask.width, mask.height), new Point(0, 0), BitmapDataChannel.RED, BitmapDataChannel.ALPHA);
// draw source2 to result
result.draw(source2);
(有更有效的方法吗?在此解决方案中,我必须克隆源代码以保持原始源位图的完整性。)
答案 0 :(得分:0)
我不知道这是否是最佳方式(性能和逻辑),但您可以尝试:
var background:BitmapData = new Background();
var bmd1:BitmapData = new Mask();
var bmd2:BitmapData = new SourceImage();
var bmDiff:Bitmap = new Bitmap(mergeMaskAndBackground(bmd2, background, bmd1));
addChild(bmDiff);
function mergeMaskAndBackground(src:BitmapData, background:BitmapData, msk:BitmapData):BitmapData
{
var diffBmpData:BitmapData = BitmapData(src.compare(msk));
diffBmpData.floodFill(0, 0, BitmapDataChannel.RED);
diffBmpData.draw(background, new Matrix(), new ColorTransform(), BlendMode.OVERLAY, background.rect, true);
return diffBmpData;
}