Okropna jakość obrazu tła w Androidzie

Staram się umieścić tło w mojej działalności, ale jakość obrazu nie jest oczekiwana.

Obraz ma prosty gradient nad niebieskimi paskami i obecnie wygląda tak:

Tło LinearLayout

Mój układ aktywności:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="@drawable/background_register"
    android:drawingCacheQuality="high" >
</LinearLayout>

Deskryptor tła (drawable/background_register):

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:antialias="true"
    android:dither="true"
    android:filter="true"
    android:tileMode="repeat"
    android:gravity="center"
    android:src="@drawable/background_blue_565" />

Obecnie mam plik XML opisujący BitmapDrawable, który jest tłem LinearLayout actitivy. Ale próbowałem wszystkiego, co znalazłem. Enabled dither, antialias, tile, rgba_8888... Co tylko chcesz. Czy ktoś ma inne rozwiązanie lub pomysł, którego mógłbym spróbować? Byłbym bardzo wdzięczny.

Btw, obecnie rozwijam aplikację W Galaxy S II.

Author: Will, 2011-12-07

3 answers

Przede wszystkim upewnij się, że oryginalny obraz wygląda dobrze, więc nie tylko dostajesz problem stamtąd.
Następnie w metodzie onCreate () wykonaj:

Code1:

getWindow().getDecorView().getBackground().setDither(true);
getWindow().setFormat(PixelFormat.RGBA_8888);

Deprecated:

getWindow ().addFlags (WindowManager.LayoutParams.FLAG_DITHER);

I aby załadować obraz jawnie jako obraz 32-bitowy (konfiguracja RGBA-8888) dodaj następujące miejsce, w którym ładujesz swój wyświetleń:

Code2:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap gradient = BitmapFactory.decodeResource(getResources(), R.drawable.gradient, options);

findViewById(R.id.main).setBackgroundDrawable(new BitmapDrawable(gradient));


Porównanie różnych podejść: (są to wszystkie zrzuty ekranu z aplikacji wynikowej)

Moje obrazy źródłowe (64 kolory po lewej, 24 bit po prawej):
image1 i image2:
64-kolor24 bit
1: Raw 64-color image (image1) set as background from layout XML:
Obraz Raw
2: ten sam obraz (image1), używając kod1:
Dithered image
3: ten sam obraz (image1) za pomocą code1 i code2:
explicit 32bit
4: image2, załadowany code1 i code2 (w tym przypadku dithering nie jest tak naprawdę ważny, ponieważ zarówno źródło, jak i miejsce docelowe używają 8 bitów na kolor):
wyższa jakość oryginału

zauważ, że powstałe artefakty z obrazu 3 już istnieją w oryginalnym obrazie.

Uwaga: Jeśli ktoś wie, jak nieco zmniejszyć obrazy, zapraszam do edycji tego posta...

 42
Author: Jave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-26 16:57:54

Problem polega na tym, że Twój PNG został przekonwertowany na 256 kolorów, otwórz swój APK w wybranym narzędziu ZIP i sprawdź ręcznie. Jeśli tak jest, upewnij się, że Twój PNG ma:

  1. kanał alfa
  2. jeden piksel, który jest lekko przezroczysty

Powinno to uniemożliwić jej konwersję do zindeksowanej palety.

 5
Author: Gareth Davidson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-07 15:27:37

Wygląda mi to na problem z obrazem. jakie ustawienia zapisujesz obraz i format? Wygląda jak artefakty kompresji z miejsca, w którym patrzę.

 0
Author: Astronaut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-07 15:17:16