2016-03-31 13 views
0

Ben bitmap boyutunu elde etmek için bu yollar kullanabilirsiniz biliyorum:Bu, belleğe kod özülmeden önce bitmap'in boyutunu elde etmenin doğru bir yolu mu?

bitmap.getAllocationByteCount();    //API 19 
bitmap.getByteCount();      //API 12 
bitmap.getRowBytes() * bitmap.getHeight(); //earlier version 

Ama bu bütün daha önce belleğe bit eşlem deşifre gerekir demek bir Bitmap nesnesi gerek bu OOM İstisna harf olabilir. Bunun nedeni Android kod çözme bitmap kullanımı RGB_8888 varsayılan piksel başına 32 bit mal olur

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = true; 
BitmapFactory.decodeFile(bitmapPath, options); 
int picWidth = options.outWidth; 
int picHeight = options.outHeight; 
int size = 4 * picHeight * picWidth; //Byte 

: Bu yüzden ben Bitmap nesnesini almak için önce boyutunu almak için bu şekilde kullanabilirsiniz.

Bu doğru bir yol mu? Yoksa bunu yapmanın daha iyi bir yolu var mı?

cevap

1

Bitmap yapılandırmasını BitmapFactory.Options.inPreferredConfig ile seçebilirsiniz. Bu, bitmap tarafından piksel başına kaç bayt geçeceğini bildiğiniz bir konfigürasyon belirlemenizi sağlayacaktır. RGB_8888'nin varsayılan değer olduğuna inanıyorum.

Eğer Bitmap tahsisi için bellekte bitişik boş alan belirli bir tutar karşılığında bir garanti olmadığı için muhtemelen değil% 100 güvenilir bir bitmap kod okuma bir OOM önleyebilir. Ancak, yükü azaltmak için örnek boyutunuzu ve yapılandırmanızı kesinlikle ayarlayabilirsiniz.

-1

Sadece Bitmap yoluna sahip bir File nesnesi oluşturun. Daha sonra dosya boyutunu almak için file.length() dosyasını alın.

örn. Dosya bitmap = yeni Dosya (pathToBitmap);

bitmap.length();

Gerektiğinde bir try/catch cümleciği koymanız gerekir.

+0

İstediğim bitmap boyutu dosya boyutu değil, Bellekteki Bitmap Nesne boyutu ise daha büyük olabilir. –

İlgili konular