2015-05-26 116 views
1

自從我編寫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

能否請您提供一個轉型的例子,作爲來源和預期結果的圖像? – Vesper

回答

0

爲了在您的情況下在緩衝區圖像上製作覆蓋圖像,您將使用copyPixels()並將mergeAlpha設置爲true。

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

其中疊加層的alpha爲高於0,與背景混合半透明區域這將會把從bitmapOverlay數據的bitmapDataBuffer那些部分。

2

你應該更具體地說明你想要什麼樣的合併。您有幾種選擇:

  1. BitmapData.copyPixels - 提供一個快速例程沒有拉伸,旋轉或色彩效果的圖像之間的像素處理。此方法將源圖像的矩形區域複製到目標BitmapData對象的目標點處大小相同的矩形區域。

  2. BitmapData.merge - 執行從源圖像到目標圖像的每通道混合。對於每個通道和每個像素,根據源像素和目標像素的通道值計算新值。

  3. BitmapData.draw - 使用Flash運行時向量渲染器將源顯示對象繪製到位圖圖像上。您可以指定矩陣,colorTransform,blendMode和目標clipRect參數來控制渲染的執行方式。

每個都將制定出不同的事情 - 首先會只是複製了另一部分的圖像(可保持/合併阿爾法)。第二個將合併頻道數據並對其進行修改。第三個是最簡單的,可以在另一個位圖上繪製一個位圖,並使用混合模式。

只選了一個! :)

+0

那麼,我不知道我想要做什麼類型的合併。我想保持「上」圖像(PNG)的透明度,而不是在兩幅圖像上都沒有任何質量。 你有任何代碼示例? – Nicke

+0

查看鏈接好友,它充滿了例子。嘗試一下,寫出什麼結果,你想要達到什麼目的。你已經掌握了所有的信息,只是使用它,而不是找人寫你的代碼! –

+0

Thanx!我會去做! – Nicke

相關問題