2017-02-17 2 views
1

Ich habe ein Problem mit dem Bild auf dem Samsung-Gerät Jedes Mal, wenn ich ein Foto, das die vertikale Form, aber wenn es ein Bild der Galerie die Klasse ruft Vertically es mit Klasse ExifInterface programmiert und ich kann nicht dazu führen, findenFoto Orientierung in Imageview mit Samsung Handy

Jedes Mal, wenn ich ein Bild, das ich meine Klasse PreviewImage nennen, das ist, wo ich das Bild zeigen Anschließend habe ich den Knopf, der mich nimmt das Profil Foto zuweisen ich diese Methode haben onActivityResult

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) { 
     try { 
      ExifInterface exifInterface = new ExifInterface(photoFile.getAbsolutePath()); 
      int exif = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); 
      switch (exif) { 
       case ExifInterface.ORIENTATION_ROTATE_90: 
        orientation = 90; 
        break; 
       case ExifInterface.ORIENTATION_ROTATE_180: 
        orientation = 180; 
        break; 
       case ExifInterface.ORIENTATION_ROTATE_270: 
        orientation = 270; 
        break; 
      } 
     } catch (Exception e) { 
      Log.d("tmessages", e.toString()); 
     } 
     Intent intent = new Intent(this, PhotoViewer.class); 
     intent.putExtra(EXTRA_PHOTO_PATH, photoFile.getAbsolutePath()); 
     intent.putExtra(EXTRA_PHOTO_ORIENTATION, orientation); 
     intent.putExtra(EXTRA_PHOTO_EDIT, false); 
     startActivityForResult(intent, 10); 

    } 

Und das ist meine PhotoViewers Klasse

private void sendPicture() { 
     Intent returnIntent = new Intent(); 
     returnIntent.putExtra("photoDescription", photoDescription.getText().toString()); 
     returnIntent.putExtra("photoPath", localPath); 
     returnIntent.putExtra("orientation", orientation); 
     setResult(Activity.RESULT_OK, returnIntent); 
     finish(); 
    } 

Sobald das Foto aufgenommen wird es wieder mich zur onActivityResult Methode der Profilklasse, von wo es

else if (requestCode == 10 && resultCode == Activity.RESULT_OK) { 
     if (photoFile != null&&LoginController.getInstance().xmppConnection.isConnected()) { 
      byte[] photo = AndroidUtilities 
        .createProfileImage(photoFile.getAbsolutePath()); 
      ProfileManager.getInstance().publishPhoto(photo); 
      Bitmap decodedByte = BitmapFactory.decodeByteArray(photo, 0, photo.length); 
      avatar.setImageBitmap(decodedByte); 
     }else{ 
      Toast.makeText(this,R.string.LabelProfilePhotoFailed, Toast.LENGTH_SHORT).show(); 
     } 
    } 

hieß Wie kann ich die Bild Show machen ich vertikal im Profilfoto?

+0

Können Sie bitte Ausdrücke wie "Porträt" und "Landschaft" anstelle von "vertikal" verwenden. Deine Frage ist nicht klar. Können Sie es bitte überprüfen und ändern, während Sie sagen, dass Sie das Bild vertikal zeigen möchten, sagt Ihr Kommentar, dass es bereits vertikal angezeigt wird. –

Antwort

0

Sie haben die halbe Arbeit erledigt! Verwenden Sie einfach die Orientierung Sie vor berechnet:

else if (requestCode == 10 && resultCode == Activity.RESULT_OK) { 
    if (photoFile != null&&LoginController.getInstance().xmppConnection.isConnected()) { 
     byte[] photo = AndroidUtilities 
       .createProfileImage(photoFile.getAbsolutePath()); 
     ProfileManager.getInstance().publishPhoto(photo); 
     Bitmap decodedByte = BitmapFactory.decodeByteArray(photo, 0, photo.length); 
->  decodedByte = rotate(decodedByte, orientation); 
     avatar.setImageBitmap(decodedByte); 
    }else{ 
     Toast.makeText(this,R.string.LabelProfilePhotoFailed, Toast.LENGTH_SHORT).show(); 
    } 
} 

Wenn Orientierung = getIntent() getExtras() getInt (EXTRA_PHOTO_ORIENTATION)...

private static Bitmap rotate(Bitmap bm, int rotation) { 
    if (rotation != 0) { 
     Matrix matrix = new Matrix(); 
     matrix.postRotate(rotation); 
     Bitmap bmOut = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true); 
     return bmOut; 
    } 
    return bm; 
} 
+0

Hallo Freund zuallererst danke für die Hilfe, die die Methode zum Drehen private Bitmap rotate (Bitmap decodiertByte, Int-Orientierung) erstellt hat { orientation = getIntent(). GetExtras(). GetInt (EXTRA_PHOTO_ORIENTATION); Rückgabe decodiertByte; } Aber zu einem bekomme ich nicht die richtige Rotation, die wächst, dass ich versage? – Devix

+0

Freund wirklich danke, noch eine Frage? Wie könnte ich jederzeit kontrollieren, wenn ich das horizontale Foto nehme und das Foto vertikal bleibt? Dank der Methode, dass Sie mir das vertikale Foto zur Verfügung gestellt haben und das war, was ich wollte, aber machen Sie einen Test, der das Foto im Querformat macht, und ich habe das Bild gebrochen. Haben Sie eine Idee, was das sein könnte? Vorher vielen Dank. – Devix

+0

Versuchen Sie, diese Zeile hinzuzufügen: getContentResolver(). NotifyChange (photoFile, null); vor der Verwendung von ExifInterface exifInterface = new ExifInterface (photoFile.getAbsolutePath()); Wenn meine Antwort Ihnen geholfen hat, könnten Sie bitte meine Antwort upvoten oder akzeptieren :)? –

Verwandte Themen