我编程AS3已经有一段时间了。现在我有一个问题,我需要合并两个图像,其中上图是一个必须保持其透明度的png。上部图像是必须穿过下部图像的区域。有点像蒙面层。
此合并的结果应该是一个显示对象。稍后将此对象发送到具有以下签名的方法:
public function addImage (
display_object:DisplayObject,
x:Number = 0,
y:Number = 0,
width:Number = 0,
height:Number = 0,
image_format:String = "PNG",
quality:Number = 100,
alpha:Number = 1,
resizeMode:String = "None",
blendMode:String = "Normal",
keep_transformation:Boolean = true,
link:String = ''
):void
任何建议都是最重要的。谢谢!
UPDATE;
经过一番挣扎,我想出了这个:
var bitmapDataBuffer:BitmapData = new BitmapData ( front.loader.width, front.loader.height, true );
bitmapDataBuffer.draw ( front.loader );
var bitmapOverlay:BitmapData = new BitmapData ( front.loader.width, front.loader.height, true );
bitmapOverlay.draw ( frontBanner.loader );
var rect:Rectangle = new Rectangle(0, 0, front.loader.width, front.loader.height);
var pt:Point = new Point(0, 0);
var mult:uint = 0x00;
bitmapOverlay.merge(bitmapDataBuffer, rect, pt, mult, mult, mult, mult);
var bmp:Bitmap = new Bitmap(bitmapOverlay);
pdf.addImage(bmp,0,0,0,0,ImageFormat.PNG,100,1,ResizeMode.FIT_TO_PAGE);
问题是我的背景图像(由bitmapDataBuffer表示)将被我的上部图像(我称之为叠加的图像)完全覆盖。
叠加图像是png图像。该图像的一部分是透明的。通过这种透明度,我想看到我的背景图像。
还有其他建议吗?
答案 0 :(得分:2)
您应该更具体地了解您想要的合并类型。您有几个选择:
BitmapData.copyPixels - 提供快速例程,在没有拉伸,旋转或颜色效果的图像之间执行像素操作。此方法将源图像的矩形区域复制到目标BitmapData对象的目标点处的相同大小的矩形区域。
BitmapData.merge - 执行从源图像到目标图像的每个通道混合。对于每个通道和每个像素,基于源像素和目标像素的通道值计算新值。
BitmapData.draw - 使用Flash运行时矢量渲染器将源显示对象绘制到位图图像上。您可以指定matrix,colorTransform,blendMode和目标clipRect参数来控制渲染的执行方式。
每个人都会尝试不同的东西 - 第一个只是将一些图像复制到另一个图像上(可以保留/合并alpha)。第二个将合并通道数据并进行修改。第三个是最简单的,可以在另一个上绘制一个位图,也可以使用混合模式。
选择一个! :)
答案 1 :(得分:0)
为了在您的案例中为缓冲区图片制作叠加图像,您需要copyPixels()
并将mergeAlpha
设置为true。
bitmapDataBuffer.copyPixels(bitmapOverlay, rect, new Point(), null, null, true);
这会将bitmapOverlay
的数据放置到覆盖的alpha高于0的bitmapDataBuffer
部分,将半透明区域与背景混合。