2013-03-10 23 views
7

Bir Android uygulaması yapıyorum ve bir mağarada bir görüntü (bitmap) yüklemem ve "tutam yakınlaştırma" hareketini kullanarak yeniden boyutlandırmam gerekiyor. Ancak, görüntü belirli bir boyutun üzerindeyse, uygulama çöküyor (OutOfMemory istisnası). Görüntünün yüklenmesini ve işlenmesini nasıl optimize edebilirim? Büyük bitmap'lerden yükleme Android

kullandığım resim yüklemek için:

BitmapFactory.decodeResource (ctx.getResources(), R.drawable.image) 

onu çizmek için:

imgCanvas.drawBitmap (image, posX, posY, null), 

boyutunu değiştirmek için:

Bitmap.createScaledBitmap (originalBitmap, neww, NEWH, true); 

cevap

3

Bu önemsiz değildir. Görüntünün geçerli ölçek ve görüntünün şu anda görünür kısmına dayanarak

, sadece uygun çözünürlükte o görüntünün bir bölümünü yüklemek:
https://developer.android.com/reference/android/graphics/BitmapRegionDecoder.html

Uzaklaştırılmışken ve göstermek istediğiniz ,
https://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize

yakınlaştırma: tüm görüntü bir değere 1'den büyük (bir 2 gücü tercihan bir değer) inSampleSize bir BitmapFactory.Options parametre almak bu BitmapRegionDecoder sınıftan yöntemleri kullanmak ve ayarlayın, küçültülmüş ilk yakınlaştır Daha önce gösterilmiş olan daha düşük çözünürlükte (inSampleSize> 1 değerini kullandığınız) ve daha yüksek çözünürlüklü bir sürümü (inSampleSize, kullandığınız önceki değerden daha küçükse) BitmapRegionDecoder kullanarak yavaş yavaş yükleyin ve daha yüksek çözünürlükte sürümü yavaş yavaş soldurun.

yakınlaştırdığında atarken, inSampleSize kadar bunu yapmaya devam 1.

+0

Başlangıçta (inSampleSize = 1 ile) orijinal boyutunda resim yüklemek olduğunu. "Yakınlaştır" özelliğini oluşturduğumda, inSampleSize değerini> 1 ile değiştirmek zorundayım ve ardından resmi kırpmalı mıyım? – Giammy

+0

Kullanıcı yakınlaştırmadan önce, tüm resminizi inSampleSize> 1 ile yüklersiniz. Ardından, kullanıcı belirli noktalara yakınlaştırdığında, görüntüyü tekrar yükler, ancak bunun yalnızca bir bölümünü ve daha düşük bir değere sahip bir inSampleSize ile yükleyeceksiniz (ancak hala 1'den fazla). Kullanıcı tekrar tekrar yakınlaştığında, bir noktada inSampleSize = 1 (ve sadece görünen kısmı yükleyeceksin). –

İlgili konular