2013-01-25 17 views
5

Şimdi bunu bir süredir sormak istiyorum. Çok büyük bir arka plan çizdiğim bu oyunu yaratıyorum. Ama sorun şu ki (tabii ki), oyuna daha fazla öğe koyduğumda, bir OutOfMemory istisnası alıyorum.OutOfMemory İstisnası: Görüntüleri sıkıştırmak yığın boyutunu azaltır mı?

Sormak istediğim şey, görüntüyü sıkıştırarak yığın boyutu tahsisini azaltır mı? Örneğin, PNG arka planım (piksel olarak 3000 x 3000) yaklaşık 1,5 MB'dir. Bir dizi PNG kompresyonundan sonra (TinyPNG ve PNGGauntlet gibi yazılımlar aracılığıyla), arka planın boyutu 712 KB'ye düşürülmüştür. Buradaki sıkıştırılmış görüntü hala orijinal ile aynı boyuttadır (2000'e göre 3000).

Özgün arkaplan boyutu (1,5 MB) için yığın boyutu tahsisi sıkıştırılmış (712 KB) biriyle aynı mı olacak?

+1

Çok güzel bir soru. Cevap muhtemelen “evet”, çünkü grafik sistemleri ekrana çekmek için sıkıştırılmamış görüntülere ihtiyaç duyuyor, ancak emin değilim. Arka planını 1500'e 1000 oranında küçültmeyi ve bellek tüketiminin dört kez düşüp düşmediğini görmeyi deneyeceğim. – dasblinkenlight

+0

Evet, diğer modüller ile bitirdiğim anda bunu deneyeceğim. Bunun nasıl yapılacağından emin değilim, ama görüntü sıkıştırmaları yaptıktan sonra oyunun FPS'si büyük ölçüde arttı. Ancak, yığın büyüklüğünün azaltıldığından emin değilim. – dabaerju

cevap

1

Yanıt, hem sıkıştırılmış hem de sıkıştırılmamış görüntüde aynı miktarda bellek barındırıyor - sonuçta yalnızca R, G, B (, A) değerlerinin bir ızgarası olarak sonlanıyor.
Bellek biriktirebildiğiniz yalnızca, GPU'nun doğrudan desteklediği bir sıkıştırma biçimi kullanıyorsanız (örn. OpenGL dokuları için S3TC sıkıştırması).

Sıkıştırma iki şeyi azaltır: diskteki dosya boyutu ve dosyayı yüklemek için gereken IO zamanı miktarı (bu kaydetme dekompresyon işlemi tarafından telafi edilebilir). Ancak, görüntüyü ARGB_8888'den başka bir bitmap türüne (ör. RGB_565) yüklemeye bakabilirsiniz. Bu, bitmapi depolamak için gereken bellek miktarını azaltacaktır (ancak görüntünün kalitesi azalacaktır).

+0

Bu görüntüleri sıkıştırdıktan sonra bile neden bir OutOfMemory İstisnası tuttuğum konusunda çok şaşırdım. Bu kadarıyla, artık sıkıştırma işleminin sadece ekrandaki performansı iyileştirdiğini ve yükleme süresinin kısaldığını biliyorum. Bunu temizlemek için çok teşekkür ederim! Büyük yığın boyutuna izin vermekten veya dosya boyutunu küçültmekten başka yol yok sanırım. – dabaerju

+1

Görüntüyü, ARGB_8888'den başka bir bitmap türüne yükleyebilirsiniz (ör. RGB_565 - bu, yarı kadar bellek kullanır). –