Bitmap Orientation anhand des Pfades herrausfinden

  • Antworten:1
Dietrich Gebert
  • Forum-Beiträge: 245

12.05.2015, 09:33:31 via Website

Hallo Leute,

ich habe das Problem, dass ich es einfach nicht schaffe die Bild orientation anhand des Pfades herraus zu finden.
Der Ausgangspunkt ist vollgender.

Ich habe einen Image Chooser, dieser bietet die Möglichkeit Bilder direkt mit der Kamera zu machen, sowie Bilder aus den Dokumenten zu holen.

Wenn ich die Bilder mit der Kamera mache, dan bekomme ich mit dem unten stehenden Quellcode die Orientation und kann anhand dessen das Bild richtig rotieren.

Wenn ich ein Bild aus den Dokumenten wähle, dann ist die orientation immer 0, somit habe ich falsch rotierte Bilder in meiner Image View.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == IMAGE_CHOOSER) {
            final boolean isCamera;
            if (data == null) {
                isCamera = true;
            } else {
                final String action = data.getAction();
                if (action == null) {
                    isCamera = false;
                } else {
                    isCamera = action.equals(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                }
            }

            Uri selectedImageUri;
            if (isCamera) {
                selectedImageUri = outputFileUri;
            } else {
                selectedImageUri = data == null ? null : data.getData(); //Get Uri
            }

            try {
                Bitmap bitmap = decodeUri(selectedImageUri); //Create Bitmap 

                //--------Get orientation---------Works only with camera not with document choosen files
                //If Picure is choosen from documents orientation is always 0
                String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION};
                Cursor cur = managedQuery(selectedImageUri, orientationColumn, null, null, null);
                int orientation = -1;
                if (cur != null && cur.moveToFirst()) {
                    orientation = cur.getInt(cur.getColumnIndex(orientationColumn[0]));
                }
                //------------------------------------------------------------------------

                //Bitmap rotation with orientation
                bitmap = RotateBitmap(bitmap, orientation);

                //-----------------Custom code for calculating image height and width
                Integer h = bitmap.getHeight();
                Integer w = bitmap.getWidth();

                Double factor = (double)convertDpToPixel(200, mContext)/(double)h;
                w = (int)(factor * w);
                //-----------------------------------------------------------------

                //Create new Bitmap 
                Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, w, (int)convertDpToPixel(200, mContext), false);

                //..... ScaledBitmap in eine ImageView setzen

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

Ich hoffe ihr könnt mir da weiter helfen, verzweifle so langsam an dem Ding^^.

Grüße
Dima

Antworten
Sven R.
  • Forum-Beiträge: 1.904

12.05.2015, 10:06:49 via App

Es würde mich wundern, wenn bei einem gespeichertem Bild eine Orientation gespeichert wird, da die Kamera beim Bild machen das Bild schon auf die Orientation bezogen richtig dreht und so abspeichert. Also sollten die Bilder erst gar nicht gedreht werden müssen.
Sind die Bilder aus den Dokumenten, die du mit der Kamera gemacht hast, richtig rum? Sollte jedenfalls so sein.

— geändert am 12.05.2015, 10:07:43

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten