2010-10-28 14 views
12

yükleniyor. Herhangi bir seçenek olmadan yüklerseniz, sonuçta oluşan Bitmap'in RGB_565 yapılandırması vardır, yani gri tonlamalı olarak kabul edilir. Tercih edilen yapılandırmayı ALPHA_8 olarak ayarlarsanız, bunun yerine bunu bir gri tonlamalı ARGB_8888 olarak yükler.Android: Ben Porter-Duff çizim işlemleri için bir alfa maske olarak kullanmak istediğiniz bir tek kanallı PNG dosyası var bir alfa maskesi bit eşlem

nasıl bir alfa maskesi yerine gri tonlama görüntü olarak bu dosyayı tedavi etmek Android'i ikna edebilirsiniz?

Şimdi RGB kanallarının tüm sıfır olan bir RGBA PNG dosyasında alfa kanalı dahil ediyorum: çözüm olmak yerine bir geçici çözüm

mask1 = BitmapFactory.decodeStream(pngStream); 
// mask1.getConfig() is now RGB_565 

BitmapFactory.Options maskOpts = new BitmapFactory.Options(); 
maskOpts.inPreferredConfig = Bitmap.Config.ALPHA_8; 
mask2 = BitmapFactory.decodeStream(pngStream, null, maskOpts); 
// mask2.getConfig() is now ARGB_8888 (the alpha channel is fully opaque) 
+0

Tercih edilen yapılandırmayı ARGB_8888 olarak ayarladığınızda ne olur? – EboMike

+0

ALPHA_8 ile aynı sonuç. Opak bir alfa kanalı ile bir ARGB_8888 bitmap alıyorum. – kvance

+0

Png'niz hangi renk tipidir? Gri tonlu olan 0 tahmin ediyorum. Bildiğim kadarıyla "alfa sadece" png dosyası yok. Bunu elde edebileceğiniz en yakın dosya, dosya boyutu için alfa dizinine ait bir kimlik haritasına sahip 8 bitlik bir palet olurdu. Ama muhtemelen buna değmez. Aşağıdaki geçici çözümünüz muhtemelen alacağınız en iyisidir. Ama o adam olmaktan nefret ediyorum: API burada bir şey anlatmaya çalışıyor! Alfa ve RGB'yi birlikte tut. Her zaman. Daha hızlı ve daha iyi desteklenecek. ALPHA_8 kullanarak iyi yolu bırakın. Mümkünse tasarımınızı RGBA'ya değiştirmeye çalışın. – starmole

cevap

5

Daha. Bu dosyayı tercih edilen ARGB_8888 yapılandırmasıyla yükleyebilir ve daha sonra alfa kanalı ayıklayabilirim. Bu, maske dosyasında birkaç KB ve görüntüyü deşifre ederken çok fazla bellek harcar.

BitmapFactory.Options opts = new BitmapFactory.Options(); 
opts.inPreferredConfig = Bitmap.Config.ARGB_8888; 
Bitmap source = BitmapFactory.decodeStream(pngStream, null, opts); 
Bitmap mask = source.extractAlpha(); 
source.recycle(); 
// mask.getConfig() is now ALPHA_8 
+0

Daha iyi bir çözüm buldunuz mu? Aynı problemle karşılaşıyorum. – Tenfour04

+0

@ TenFour04 Maalesef hiç yapmadım. – kvance

İlgili konular