Flex 獲得png透明截圖的問題和解決方法
更新時間:2009年10月23日 22:59:09 作者:
最近Flex項目中需要保存背景為透明的截圖,需要用到PngEncoder類。
代碼大概這樣:
// displaObject 為需要截圖對象
var pngEncoder:PngEncoder = new PngEncoder();
var bitMapData:BitmpaData = new BitmpaData(displaObject.widht,displaObject.height);
bitMapData.draw(displaObject);
var imageByteArray:ByteArray = pngEncoder.encode(bitMapData);
.....
send the imageByteArray to server side scripts .......
但是得到結(jié)果并不透明,于是懷疑encode方法沒有包含Alpha通道。改為第二種方法:
var bytes:ByteArray = bitmapData.getPixels(new Rectangle(0,0,bitmapData.width,bitmapData.height));
var imageByteArray2:ByteArray = pngEncoder.encodeByteArray(bytes,bitmapData.width,bitmapData.height,true);
結(jié)果仍然沒有透明度信息!
于是仔細(xì)讀了手冊每一項找到如下一段話:
transparent:Boolean (default = true) — 指定位圖圖像是否支持每個像素具有不同的透明度。默認(rèn)值為 true(透明)。若要創(chuàng)建完全透明的位圖,請將 transparent 參數(shù)的值設(shè)置為 true,將 fillColor 參數(shù)的值設(shè)置為 0x00000000(或設(shè)置為 0)。將 transparent 屬性設(shè)置為 false 可以略微提升呈現(xiàn)性能。
也就是說,transparent = true 還不行,fillColor還必須設(shè)置為 0x000000?。?
var bitMapData:BitmpaData = new BitmpaData(displaObject.widht,displaObject.height,true,0x000000);
其實這樣設(shè)置挺說不通的,但是以后碰到問題還是要多看看手冊了!
復(fù)制代碼 代碼如下:
// displaObject 為需要截圖對象
var pngEncoder:PngEncoder = new PngEncoder();
var bitMapData:BitmpaData = new BitmpaData(displaObject.widht,displaObject.height);
bitMapData.draw(displaObject);
var imageByteArray:ByteArray = pngEncoder.encode(bitMapData);
.....
send the imageByteArray to server side scripts .......
但是得到結(jié)果并不透明,于是懷疑encode方法沒有包含Alpha通道。改為第二種方法:
復(fù)制代碼 代碼如下:
var bytes:ByteArray = bitmapData.getPixels(new Rectangle(0,0,bitmapData.width,bitmapData.height));
var imageByteArray2:ByteArray = pngEncoder.encodeByteArray(bytes,bitmapData.width,bitmapData.height,true);
結(jié)果仍然沒有透明度信息!
于是仔細(xì)讀了手冊每一項找到如下一段話:
transparent:Boolean (default = true) — 指定位圖圖像是否支持每個像素具有不同的透明度。默認(rèn)值為 true(透明)。若要創(chuàng)建完全透明的位圖,請將 transparent 參數(shù)的值設(shè)置為 true,將 fillColor 參數(shù)的值設(shè)置為 0x00000000(或設(shè)置為 0)。將 transparent 屬性設(shè)置為 false 可以略微提升呈現(xiàn)性能。
也就是說,transparent = true 還不行,fillColor還必須設(shè)置為 0x000000?。?
復(fù)制代碼 代碼如下:
var bitMapData:BitmpaData = new BitmpaData(displaObject.widht,displaObject.height,true,0x000000);
其實這樣設(shè)置挺說不通的,但是以后碰到問題還是要多看看手冊了!
相關(guān)文章
Flex 創(chuàng)建一個自定義風(fēng)格的HRule或VRule
Flex中如何通過strokeWidth, strokeColor和shadowColor樣式,創(chuàng)建一個自定義風(fēng)格的HRule或VRule2009-06-06Flex與.NET互操作 使用HttpService、URLReqeust和URLLoader加載/傳輸數(shù)據(jù)
在前兩篇文章中分別介紹了Flex與.NET的WebService之間的數(shù)據(jù)交互通信知識,本文將介紹另外一種加載數(shù)據(jù)以及發(fā)起請求的方式。2009-06-06Flex 創(chuàng)建復(fù)數(shù)行文本內(nèi)容的List
效果不錯的flex多行文本2008-11-11Flex DataGrid DataGridColumn數(shù)據(jù)顏色多樣化-類型替換
用得多了,發(fā)覺自己了解的真的是九牛之一毛都沒有,最近用到了從后臺讀出數(shù)據(jù)時顯示的問題,相信很多人都有用整形數(shù)據(jù)來代替字符串?dāng)?shù)據(jù)的情況2009-06-06Flex tree組件數(shù)據(jù)源、圖標(biāo)等修改
在flex中Tree組件的使用。使用XML作為Tree組件的數(shù)據(jù)源。2009-05-05