2009-10-01 15 views
2

如果我在Flex中使用加載程序加載位圖,則可以使用loaderInfo.bytesTotal獲取位圖的大小(使用的總字節數)。查找Flex中位圖使用的總字節數

如果我在運行時創建一個位圖,我怎麼才能找出這個位圖的大小,總字節數。

請指教。謝謝

回答

4

var bitmapByteSize:int = bitmap.bitmapData.getPixels(bitmap.bitmapData.rect).length;

這可能會訣竅。

+0

JStriedl,謝謝你的回覆。我曾嘗試過類似的方法。 var byteArray:ByteArray = _bitmap.bitmapData.getPixels(new Rectangle(0,0,_bitmap.width,_bitmap.height)); _bitmapTotalBytes = byteArray.length; 但是,_bitmapTotalBytes比原始jpg文件大得多,儘管我已經減小了寬度和高度。 你知道爲什麼嗎?謝謝。 – michael 2009-10-01 18:43:15

+0

當存儲在磁盤上時,jpeg格式被壓縮,並且必須解壓才能顯示。因此,ByteArray的長度將比文件大得多,因爲它表示未壓縮,可顯示格式的像素數據,而不是原始壓縮的JPEG文件大小。 – JStriedl 2009-10-01 18:55:51

+0

Striedl,謝謝。 – michael 2009-10-01 19:00:09

3

我覺得比一個更好的解決方案上面會:

var bitmapByteSize:uint = bitmap.bitmapData.width * bitmap.bitmapData.height * 4; 

這是因爲使用通過getPixels()方法創建一個額外的ByteArray,所以它是既緩慢,並使用額外的內存。

+0

謝謝bslote。等式中「* 4」的含義是什麼?我的意思是爲什麼要乘以4而不是其他數字。謝謝。 – michael 2012-09-04 15:09:34

+0

對不起,延遲的迴應,邁克爾。這是因爲BitmapData中有四個8位通道(RGB和alpha)。因此,我們將位圖中的像素數量(寬度*高度),然後乘以通道數(4)乘以每個通道的字節數(1)以獲得位圖中的總字節數。 – bslote 2012-11-18 01:12:13

+0

謝謝,bslote。 – michael 2012-12-12 04:27:12

相關問題