合并两个图像并保持其透明度

时间:2015-05-26 04:46:41

标签: actionscript-3

我编程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图像。该图像的一部分是透明的。通过这种透明度,我想看到我的背景图像。

还有其他建议吗?

2 个答案:

答案 0 :(得分:2)

您应该更具体地了解您想要的合并类型。您有几个选择:

  1. BitmapData.copyPixels - 提供快速例程,在没有拉伸,旋转或颜色效果的图像之间执行像素操作。此方法将源图像的矩形区域复制到目标BitmapData对象的目标点处的相同大小的矩形区域。

  2. BitmapData.merge - 执行从源图像到目标图像的每个通道混合。对于每个通道和每个像素,基于源像素和目标像素的通道值计算新值。

  3. BitmapData.draw - 使用Flash运行时矢量渲染器将源显示对象绘制到位图图像上。您可以指定matrix,colorTransform,blendMode和目标clipRect参数来控制渲染的执行方式。

  4. 每个人都会尝试不同的东西 - 第一个只是将一些图像复制到另一个图像上(可以保留/合并alpha)。第二个将合并通道数据并进行修改。第三个是最简单的,可以在另一个上绘制一个位图,也可以使用混合模式。

    选择一个! :)

答案 1 :(得分:0)

为了在您的案例中为缓冲区图片制作叠加图像,您需要copyPixels()并将mergeAlpha设置为true。

bitmapDataBuffer.copyPixels(bitmapOverlay, rect, new Point(), null, null, true);

这会将bitmapOverlay的数据放置到覆盖的alpha高于0的bitmapDataBuffer部分,将半透明区域与背景混合。