2014-11-04 74 views
0

非常簡單:如何僅用純Flash保存圖像? 用純Flash保存圖像?


示例代碼:

var bitmap: BitmapData = new BitmapData(100, 100, true, 0); 
bitmap.draw(this); 
var data: ByteArray = bitmap.getPixels(bitmap.rect); 
var f: FileReference = new FileReference(); 
f.save(data, "test.bmp"); 

這節省了我的40000個字節(4 * 100 * 100)的文件。我用十六進制編輯器檢查過它,它的我的位圖/精靈的像素。現在我不在乎圖像類型是什麼出來的。我只是希望它以我可以用普通圖像編輯器顯示的格式保存。我不想安裝額外的東西。我可以只使用Flash嗎?沒有AIR,沒有JPGEncoder,沒有額外的東西?

(此功能不爲客戶反正使用。)

+0

[PNGEncoder](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/graphics/codec/PNGEncoder.html)如何?而你的問題有點令人困惑,bmp能否正確保存? – DodgerThud 2014-11-04 07:47:02

+0

@DodgerThud只有像素被保存,沒有圖像的寬度或高度,沒有位圖標題。我只是仔細檢查。 PNGEncoder不在我的系統中,所以它屬於所有額外的東西。 – Bitterblue 2014-11-04 07:51:22

+0

那麼,你可以用圖像編輯器來看看.bmp嗎?如果你想將它轉換爲另一個文件,你不會使用額外的東西 – DodgerThud 2014-11-04 07:52:52

回答

1

我找到了解決辦法。 首先,您需要確保您的目標Flash Player的版本至少爲11.3,並且編譯SWF的版本至少爲18(或至少18版本適用於我)。

BitmapData類具有自己的方法,稱爲encode,它將爲您處理編碼工作,無論是JPEG還是PNG。這裏是如何做到這一點:

var bitmap:BitmapData = new BitmapData(100,100,true,0); 
bitmap.draw(this); 
var data:ByteArray = new ByteArray(); 
var o:PNGEncoderOptions = new PNGEncoderOptions(); 
bitmap.encode(bitmap.rect, o, data); 
var f:FileReference= new FileReference(); 
f.save(data, "test.png"); 

encode第三個參數是輸出字節組,其中編碼的ByteArray將得到保存。

AS3 Documentation

+0

令人驚訝的是它的工作原理。我認爲任何以「PNGEncoder」或「JPEGEncoder」開頭的東西都意味着死刑,但兩種選項類都可用,並且編碼也可以工作,儘管我本身無法訪問編碼器類。謝謝! – Bitterblue 2014-11-04 08:42:05

+0

沒問題,我剛剛偶然發現了這個問題,查看了Docs。你應該保持謹慎,我認爲它使用像PNGEncoder(和JPGEncoder)一樣的東西,所以它很慢,並且會鎖定你的UI線程,如果你編碼非常大的圖像。 – DodgerThud 2014-11-04 08:44:44

0

你仍然可以使用包括PNGEncoder或JPGEncoder,仍然是 「純閃存」。如果你錯過了庫,你可以在as3corelib swc library中得到它們(和其他)。只需將swc包含在庫路徑中。

如果由於某種原因它不夠純粹,我想你總是可以進入庫的源代碼並複製出特定的PNGEncoder或JPGEncoder類,並將其用於您的使用。