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:
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.
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:
1: Raw 64-color image (image1) set as background from layout XML:
2: ten sam obraz (image1), używając kod1:
3: ten sam obraz (image1) za pomocą code1 i code2:
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):
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...
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:
- kanał alfa
- jeden piksel, który jest lekko przezroczysty
Powinno to uniemożliwić jej konwersję do zindeksowanej palety.
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ę.
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