2011-12-28 30 views
6

Denemelerden ve diğer yayınları okuyarak like this one göründüğü kadarıyla, yüksek çözünürlüklü görüntüleri Android üzerinde işlemenin zor olduğu görünüyor çünkü VM'nin ne kadar bellek ayırmaya izin vereceğine dair bir sınır var.Android yüksek çözünürlüklü görüntü işleme

8MP kamera resimlerinin yüklenmesi yaklaşık 20 MB bellek alır.

Kolay çözüm, görüntüyü yüklerken (BitmapFactory böyle bir seçenek sunuyor) görüntüyü küçültmek olduğunu anlıyorum ama yine de görüntüyü tam çözünürlükte işlemek istiyorum: kamera 8MP çekiyor, neden sadece 4MP kullanırım ve kaliteyi azaltın.

Bunun için iyi bir çözüm bilen var mı?

cevap

1

2 nokta:

  1. Ödeme Petek galeri. Bu, döşemeli oluşturma işlemini yapar. Bir görüntüyü yakınlaştırabilir ve daha sonra mevcut parçanın diğer kısımlardan daha yüksek olduğunu görebilirsiniz. Etrafında gezinirseniz, bunu görüyoruz. Yerel kod (NDK) kullanılırken kaynak sınırı yoktur. Bu nedenle, yereldeki tüm verileri yüklemeyi deneyebilir ve JNI'yi kullanarak bir kısmını parçalara ayırabilirsiniz, ancak daha sonra honeycom galerisi bundan daha iyi olur.

+0

1. İlgili BitmapFactory gerçekten böyle şeyler yapmak için tasarlanmıştır: sadece bir bölgeye yükleme, daha düşük çözünürlükte yükleme. Yükleme bölgeleri, @ paul-sasik'in önerdiği gibi döşeme yapmak için yararlı olabilir. – Kamchatka

+0

2 ile ilgili olarak, aynı sınırlar yerel kod için geçerlidir. Kendimi, bir şeyler oluşturan yerel OutOfMemory hataları ile alıyorum. –

2

Kaynak kısıtlı bir ortamda, tek çözümünüzün bölmek ve fethetmek olduğunu düşünüyorum: ör. önbelleğe alma/döşeme (olduğu gibi: fayans)

Görüntünüzü bir kerede yüklemek ve işlemek yerine işlenecek bir ham veri dosyasından görüntünün yönetilebilir parçalarını yükler/kaydedersiniz. Bu önemsiz değildir ve yapmak istediğiniz işlem türüne bağlı olarak gerçekten karmaşık olabilir, ancak görüntü kalitesinden oluşmak istemiyorsanız tek yoldur.

+0

Döşemeleri düşündüm. Görüntü işlemeyi biraz daha karmaşık hale getirir, ancak asıl dezavantajı ise, bir çok geçici dosyadan gelen son dosyayı yeniden yapılandırmam gerektiğidir. Muhtemelen yapılabilir ama çok ağır. – Kamchatka

+0

Görüntünüzün boyutları işlem sırasında değişmezse, geçici dosyalara ihtiyacınız olmaz. Görüntü dosyasının doğru bölümlerine işlenmiş bölümler/fayanslar yazabilirsiniz. –

+0

Sağ. Tüm IO'larla gerçekten çok kötü işlem süresinden korkuyorum. Telefon belleğine kıyasla flaş belleğe yazmanın ne kadar yavaş olduğu hakkında bir fikrin var mı? – Kamchatka

2

Gerçekten de, bu zor. Ancak, görüntüde bazı raster formatlarda görüntü varsa, (bakınız java.nio.ByteBuffer) - bu şekilde ayırmadan bayt tamponu elde edebilirsiniz.

İlgili konular