Java [Android] Wie verkleinertes Bild scharf zeichnen?

Tersus

Lieutenant
Dabei seit
Okt. 2011
Beiträge
976
Guten Abend,

ich gehe, wie im offiziellen Android Developer Guide vor.
Außerdem habe ich moch noch auf einigen SoF Seiten erkundigt.

Leider ohne Erfolg.

Code:
...

        final BitmapFactory.Options options = new BitmapFactory.Options();

        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(res, resId, options);

        // Calculate inSampleSize
        options.inSampleSize = magic_berechnet_samplesize(...); // Ergebnis ist beispielsweise 4

        options.inScaled = false;
        options.inDither = false;
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;


        return BitmapFactory.decodeResource(res, resId, options);

...
Zeilgerät hat in diesem Fall eine Auflösung von 480x800.
Die Größe der ImageView ist dynamisch und stets 7/20 der Auflösungsbreite breit, also in diesem Fall 168px. So breite, wie die ImageView ist, ist sie auch hoch.

Das Ergebnis habe ich hier: Anhang 484963 betrachten

Erstes Bild hat die volle Auflösung und wurde von der ImageView per XML Befehl android:scaleType="fitXY" skailiert. Hat aber nach wie vor die Höhe und Breite von ca. 700px.

Zweites Bild wurde mit dem obigen Code auf ca. 168px in Höhe und Breite reduziert. Es ist aber ziemlich verschwommen.


Wie kann ich das Bild ohne Schärfeverlust in der Auflösung reduzieren?


Grüße
 

Teiby

Lt. Commander
Dabei seit
Sep. 2008
Beiträge
1.610
Der Anhang ist irgendwie kaputt/nicht erreichbar.

Ich kenne von der Spielentwicklung zwei Wege wie man Bilder kleiner/größer machen kann und man trotzdem noch ansehnliche Bilder erhält (Verlust gibts immer). Der eine Weg geht über die Grafikkarte (Texture filtering) oder man rechnet es mit der CPU kleiner/größer und stellt dort den Filter ein.
Folgende Filter gibts da: Pixelwiederholung, Bilinear, Bikubisch wobei der erste Filter der "billigste" und meist Standard ist, aber auch viel Schärfer, da die anderen zwei Filter das Bild verwaschen um so die Pixel weniger sichtbar zu machen.


Edit: Probiers mal mit createScaledBitmap und mach einmal den Filter aus und einmal an und schau dir das Ergebnis an.
 
Zuletzt bearbeitet:

Tersus

Lieutenant
Ersteller dieses Themas
Dabei seit
Okt. 2011
Beiträge
976
Das ist sehr merkwürdig. Bei mir funktioniert der Anhang. :freak:

Die Methode createScaledBitmap liefert mir ein Top Ergebnis. So wollte ich es auch haben, aber das Problem an dieser Methode ist doch, dass die ursprüngliche (große) Bitmap damit in den Hauptspeicher geladen werden muss. :-/

Grüße
 
Top