2011-01-10 17 views
5

Obecnie tworzę swoją pierwszą aplikację na Androida i mam problemy z renderowaniem obrazów. Sam obraz jest dobrej jakości, ale po oddaniu go jakość drastycznie spada. Krawędzie stają się postrzępione i wyglądają na słabo wykonane. Wszyscy, których dotąd pokazywałem, niemal od razu to zauważyli, bez żadnych podszeptów. [Start na lewo, na końcu prawej:]Pogniecione krawędzie na obrazach renderowanych w Androidzie

http://i.stack.imgur.com/gld5A.png

Próbuję wszystkiego jestem świadomy i każda wskazówka udało mi się znaleźć, rozglądając się w internecie, ale nic nie wydaje się, aby to naprawić.

Obecnie otrzymuję obraz jako mapę bitową i skalować go:

Bitmap holeImage = BitmapFactory.decodeResource(res, R.drawable.hole_image); 
Bitmap holeImageBMP = Bitmap.createScaledBitmap(holeImage, width, height, true); 

Raz mam obraz, tworzę farba, ustawić kilka wygładzanie atrybuty true, a następnie wyciągnąć go na płótnie :

Paint smoothingPaint = new Paint(); 
smoothingPaint.setAntiAlias(true); 
smoothingPaint.setFilterBitmap(true); 
smoothingPaint.setDither(true); 
canvas.drawBitmap(holeImageBMP, 0, 0, smoothingPaint); 

Jednak, jak widać powyżej, jakość obrazu drastycznie maleje. Widziałem wiele wspaniałych obrazów i szczerze mówiąc nie jestem pewien, co się dzieje, więc każda rada byłaby świetna!

Inne uwagi: Używam metody SurfaceView do obsługi rysunku, podobnego w naturze do przykładu LunarLander podanego w zestawie SDK.

Jeszcze raz dziękuję!

Odpowiedz

0

Jeśli nie jesteś ograniczony do znacznie mniejszej ilości kolorów niż oryginalne zdjęcie (czy Android ma 256 trybów kolorów?), Proponuję wyłączyć dithering, jeśli powiększysz swoje zdjęcie, ma ono widoczny efekt które może niszczy gładki wygląd.

Wydaje mi się, że w twoim przypadku, roztrząsanie przy pomocy antyaliasingu, niszcząc dodatkowe kolory, których potrzebuje wygładzanie, aby uzyskać gładki wygląd. Szybka zmiana koloru na zdjęciach (lewa strona około 850, prawa jedna około 140) potwierdza to.

+0

Próbowałem go i to nie różnicę. Przyznaję, że jest tylko jeden powód, ponieważ ktoś w innym wątku stackoverflow.com zasugerował: P Doceniam tę myśl! Naprawdę każdy pomysł jest pomocny. –

+0

OK, myślę, że odpowiedź Pedro jest bardziej pomocna w tym przypadku. Nie zrobiłem jeszcze nic z Androidem, więc nie wiedziałem, że istnieją problemy z ditheringiem/bandowaniem i właśnie udzieliłem odpowiedzi związanej z grafiką. – schnaader

+0

Wystarczająco fair. Jeszcze raz dzięki! : D –

1

To prawdopodobnie wiąże się z konwersją obrazów z jednego formatu na inny. Również ekrany z Androidem różnią się w zależności od urządzenia. Spróbuj użyć innego urządzenia i może wyglądać lepiej ... Prawie na pewno będzie to miało inny ton.

Spróbuj przeczytać ten wielki artykuł na ten problem (i banding i dithering'u) i rozważyć dostosowanie obrazu utworzonego na to, aby lepiej działać na urządzeniach z Androidem: http://www.curious-creature.org/2010/12/08/bitmap-quality-banding-and-dithering/

+0

Dzięki za radę! Próbowałem go na kilku różnych urządzeniach (głównie w wersji Incredible i Droid X, chociaż powyższy obraz pochodzi z emulatora) i jest dość spójny. Zastanawiam się, czy zamiast tego zapisuje się pliki jako bitmapy zamiast PNG? Przeczytam ten artykuł - wygląda obiecująco. Dzięki! –