Mam jednokanałowy plik PNG, który chciałbym użyć jako maski alfa do operacji rysowania Porter-Duff. Jeśli załaduję go bez żadnych opcji, wynikowa mapa bitowa ma konfigurację RGB_565, czyli jest traktowana jako skala szarości. Jeśli ustawię preferowaną konfigurację na ALPHA_8, ładuję ją zamiast ARGB_8888 w skali szarości.Android: ładowanie mapy bitowej maski alfa
Jak mogę przekonać Androida do traktowania tego pliku jako maski alfa zamiast obrazu w skali szarości?
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)
Co stanie się po ustawieniu preferowanej konfiguracji na ARGB_8888? – EboMike
Ten sam wynik co ALPHA_8. Otrzymuję mapę bitową ARGB_8888 z nieprzezroczystym kanałem alfa. – kvance
Jakiego rodzaju jest twój png? Zgaduję 0, czyli w skali szarości. O ile mi wiadomo, nie ma pliku png "alpha only". Najbliżej można było uzyskać paletę 8-bitową z mapą identyczności indeksu do alfa - dla rozmiaru pliku. Ale prawdopodobnie nie warto. Twoje obejście poniżej jest prawdopodobnie najlepszym rozwiązaniem. Ale nie znoszę być tym facetem: API próbuje ci coś tutaj powiedzieć! Trzymaj alfa i RGB razem. Zawsze. Będzie szybszy i lepiej obsługiwany. Za pomocą ALPHA_8 pozostawiasz dobrą ścieżkę. Spróbuj zmienić swój projekt na RGBA, jeśli to w ogóle możliwe. – starmole