Domanda

Voglio mostrare immagini utilizzando il metodo drawBitmap (). Ma prima voglio ridimensionare secondo dimensioni dello schermo. Ho un problema con la qualità dell'immagine risultato. Potete vedere le immagini e il codice di prova di seguito. Come faccio a ridimensionare le immagini in fase di esecuzione con una buona qualità?

Grazie per le soluzioni.

Immagine originale: alt text http://dl.dropbox.com/u/709109/gradient.png

screenshot dei risultati sul dispositivo: alt text http://dl.dropbox.com/u/709109/device.png

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;

import java.io.IOException;
import java.io.InputStream;

public class MyActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LinearLayout container = (LinearLayout) findViewById(R.id.container);
        container.addView(new View(this) {
            @Override
            protected void onDraw(Canvas canvas) {
                Bitmap unscaledBitmap;
                try {
                    InputStream in = getAssets().open("images/gradient.png");
                    unscaledBitmap = BitmapFactory.decodeStream(in);
                    in.close();
                    canvas.drawBitmap(unscaledBitmap, null, new Rect(0, 0, 320, 480), null);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}
È stato utile?

Soluzione

Fare riferimento alla risposta di Romain di seguito.

Vorrei eliminare questa risposta, ma non riesco a dal momento che è contrassegnato come accettato.


Si noti che Android [quando questa risposta è stato originariamente scritto, senza chiedere esplicitamente a 32-bit color] sarebbe solo fare colore a 16 bit, quindi ci possono essere momenti in cui si ottiene artefatti indesiderati.

Si può anche provare a utilizzare le opzioni di dithering per dire Android per applicare automaticamente dithering che, pur non perfetto, in grado di contribuire a rendere le cose sembrano un po 'meglio.

Altri suggerimenti

Invece di ridimensionamento in tempo (che sta per essere molto costoso) elaborare, cercare di ridimensionare in un bitmap lo schermo e assicurarsi che bitmap è di 32 bit (ARGB888).

http://developer.android.com/reference /android/graphics/BitmapFactory.Options.html (da utilizzare con     unscaledBitmap = BitmapFactory.decodeStream (in);

È possibile aggiungere impostazioni di qualità all'immagine. Sto indovinando che la qualità viene degradata in quanto non si passa alcuna impostazione per come l'immagine deve essere elaborata.

implementazioni del metodo createScaledBitmap (..) su piattaforme anziani (livello API <12) causano problemi quando si tenta di ridimensionare un bitmap ARGB_8888 che non ha alcun valore alfa effettivo (cioè ogni pixel ha alfa = 255), perché la loro hasAlpha flag è impostato su false. In tal caso il bitmap in scala viene automaticamente convertito nel formato RGB_565.

Di conseguenza dal livello API 12 v'è un metodo (nella classe bitmap)

setHasAlpha(boolean value);

Il che aiuta a prevenire una conversione quando si utilizzano createScaledBitmap (..).

C'è un modo per utilizzare lo stesso metodo su API di livello> 3. è presente da molto tempo, solo nascosto. Tutte le misure necessarie, tra cui il codice sorgente sono descritte qui:

https://stackoverflow.com/a/12202069/1082933

Spero che questo aiuti.

Ho avuto un problema simile e qui è quello che ho finito per fare: problemi di qualità quando ridimensionamento di un'immagine in fase di esecuzione

Inoltre, se la funzione di ridimensionamento non rispetta le proporzioni dell'immagine, la qualità viene colpito. Potete trovare alcune algoritmo di ridimensionamento sul web, ad esempio, check this out

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top