Konvertieren von Bild-bitmap und die Verringerung der Größe der es

Habe ich Blick auf viele verschiedene Methoden zu schaffen, die eine reduzierte Größe der bitmap eines Bildes, aber keiner von Ihnen arbeiten ordnungsgemäß /ich brauche etwas anderes.

Ist das ein bisschen schwierig zu erklären 🙂

Was ich brauche, ist eine bitmap, hält das Verhältnis von Bild, aber es ist weniger als eine bestimmte Größe - zB 1mb oder den Gegenwert in Pixelmaßen (Wie diese bitmap muss Hinzugefügt putExtra() für eine Absicht).

Probleme, die ich habe, so weit:

Meisten der Methoden, die habe ich mir angeschaut erstellen eine skalierte version der bitmap. Also: Bild -> Bitmap1 (nicht skaliert) -> Bitmap2 (skaliert). Aber wenn die Auflösung des Bildes ist sehr hoch, es ist nicht skaliert genug. Ich glaube, die Lösung wäre, um eine bitmap erstellen einer exakten Größe, sodass jede Auflösung reduziert werden kann genug.

Allerdings, der Nebeneffekt dieser Methode wäre, dass die Bilder bereits weniger als die erforderliche Größe, wird die Größe angepasst werden (oder die Größenänderung wird nicht funktionieren?). Also muss es ein "wenn", um zu überprüfen, ob das image umgewandelt werden können, um eine bitmap ohne Größenänderung.

Ich habe keine Ahnung, wie man über das tun dies, so dass jede Hilfe wird sehr geschätzt! 🙂

Dies ist, was ich im moment (Es NICHT zu tun ich will es tun):

//This is called when an image is picked from the gallery
@Override
    public void onActivityResult(int requestCode, int resultCode,
            Intent imageReturnedIntent) {
        super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

        switch (requestCode) { 
        case 0:
            if (resultCode == Activity.RESULT_OK) {
                selectedImage = imageReturnedIntent.getData();
                viewImage = imageReturnedIntent.getData();

                try {
                    decodeUri(selectedImage);
                } catch (FileNotFoundException e) {
                    //TODO Auto-generated catch block
                    e.printStackTrace();
                }

                iv_preview.setImageBitmap(mImageBitmap);
            }
            break; //The rest is unnecessary

Dies ist der Teil, der derzeit die Skalierung der Größe:

private Bitmap decodeUri(Uri selectedImage) throws FileNotFoundException { 


        //Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true; //
        BitmapFactory.decodeStream(getActivity().getContentResolver()
                .openInputStream(selectedImage), null, o);

        //The new size we want to scale to
        final int REQUIRED_SIZE = 260; //Is this kilobites? 306

        //Find the correct scale value. It should be the power of 2.
        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) {
            if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE) {
                break;
            }
            width_tmp /= 2;
            height_tmp /= 2;
            scale *= 2;
        }


        //Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        o2.inScaled = false; //Better quality?
        mImageBitmap = BitmapFactory.decodeStream(getActivity()
                .getContentResolver().openInputStream(selectedImage), null, o2);
        return BitmapFactory.decodeStream(getActivity().getContentResolver()
                .openInputStream(selectedImage), null, o2);

    }

Wenn alles muss erläutert werden, mehr bitte sagen.

Danke

  • Ihr code, AFAIU, ist falsch. wo ist die Logik zu bewahren, Seitenverhältnis?
  • check this: stackoverflow.com/questions/14710386/... Sie werden in der Lage sein darauf zu beziehen.
  • Dieser code ist falsch, es nicht zu tun, was ich will, es zu tun, aber es TUT halten Sie das Seitenverhältnis. Und danke für den link
InformationsquelleAutor RiThBo | 2013-07-18
Schreibe einen Kommentar