2012-09-06 15 views
5

Fotoğraf döndürme sorunu kodu için exifInterface kullanıyorum: Fotoğraf makinesinden çekilen fotoğraf yönelimi sorunu.Fotoğraf makinesiyle çekilen fotoğrafın çekilmesiyle ilgili sorunlar Fotoğraf makinelerinde görüntülenen görüntü

Bitmap b = BitmapFactory.decodeFile(imagePath); 
  • uygun seviyeye ölçekleme ile Bitmap yeniden boyutlandırma dosyasından bir Bitmap Oluştur
int width = b.getWidth(); 
int height = b.getHeight(); 
int newWidth = 150; 
int newHeight = 150; 
float scaleWidth = ((float) newWidth)/width; 
float scaleHeight = ((float) newHeight)/height; 
Matrix matrix = new Matrix(); 
matrix.postScale(scaleWidth, scaleHeight); 
// Bitmap resizedBitmap = Bitmap.createBitmap(b, 0, 0, width, height, matrix, true); 
// resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 70, out); 
    Görüntünün
ExifInterface exif = new ExifInterface(imagePath); 
    String orientation = exif.getAttribute(ExifInterface.TAG_ORIENTATION); 
    if (orientation.equals(ExifInterface.ORIENTATION_NORMAL)) { 
      // Do nothing. The original image is fine. 
    } else if (orientation.equals(ExifInterface.ORIENTATION_ROTATE_90+"")) { 
      matrix.postRotate(90); 
    } else if (orientation.equals(ExifInterface.ORIENTATION_ROTATE_180+"")) { 
      matrix.postRotate(180); 
    } else if (orientation.equals(ExifInterface.ORIENTATION_ROTATE_270+"")) { 
      matrix.postRotate(270); 
} 
  • kaydet yeni bitmap ait
  • Sap yönelimi
out = new FileOutputStream(new File("some output file path")); 
    Bitmap resizedBitmap = Bitmap.createBitmap(b, 0, 0, width, height, matrix, true); 
    resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 70, out); 

çözmek rotasyon sorunu için çalışmıyor Bu kod, bana, rehber verin. Lg aygıtlarında, her zaman 0 yöneliminden dönen exifinterface, Samsung aygıtları 6 ve 1 döndürüyor.

Bu sorunu, htc, Motorola, samsung, Sony ve LG gibi tüm aygıtlarla nasıl düzeltebilirim?

Hepinize minnettarım, lütfen bana yardım edin.

cevap

7

Gereksinim duyduğunuz aynı şeyi yapmak için bu işlevi kullanabilirsiniz. Bu işlevi etkinliğinizde veya herhangi bir sınıf sınıfınızda bulundurun ve dosya yolundan bitmapi almak için bunu çağırın.

Bu işlevi uygulamamda kullanıyorum ve birincil test cihazlarımız LG.

public static Bitmap decodeFile(String path) { 
    int orientation; 
    try { 
     if (path == null) { 
      return null; 
     } 
     // decode image size 
     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     // Find the correct scale value. It should be the power of 2. 
     final int REQUIRED_SIZE = 70; 
     int width_tmp = o.outWidth, height_tmp = o.outHeight; 
     int scale = 8; 
     while (true) { 
      if (width_tmp/2 < REQUIRED_SIZE 
        || height_tmp/2 < REQUIRED_SIZE) 
       break; 
      width_tmp /= 2; 
      height_tmp /= 2; 
      scale++; 
     } 
     // decode with inSampleSize 
     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize = scale; 
     Bitmap bm = BitmapFactory.decodeFile(path, o2); 
     Bitmap bitmap = bm; 

     ExifInterface exif = new ExifInterface(path); 
     orientation = exif 
       .getAttributeInt(ExifInterface.TAG_ORIENTATION, 1); 
     Log.e("orientation", "" + orientation); 
     Matrix m = new Matrix(); 

     if ((orientation == 3)) { 
      m.postRotate(180); 
      m.postScale((float) bm.getWidth(), (float) bm.getHeight()); 
      // if(m.preRotate(90)){ 
      Log.e("in orientation", "" + orientation); 
      bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), 
        bm.getHeight(), m, true); 
      return bitmap; 
     } else if (orientation == 6) { 
      m.postRotate(90); 
      Log.e("in orientation", "" + orientation); 
      bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), 
        bm.getHeight(), m, true); 
      return bitmap; 
     } 
     else if (orientation == 8) { 
      m.postRotate(270); 
      Log.e("in orientation", "" + orientation); 
      bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), 
        bm.getHeight(), m, true); 
      return bitmap; 
     } 
     return bitmap; 
    } catch (Exception e) { 
    } 
    return null; 
} 
+0

Ayrıca HTC üzerinde test yaptınız mı? – user991429

+0

Evet, uygulamayı HTC Explorer ile de test ediyorum ve LG Optimus Black gibi iyi çalışıyor. @ user991429 – MKJParekh

+0

@MKJParekh: Harika iş, teşekkürler :) – Aerrow

İlgili konular