2012-09-06 15 views
5

मैं फोटो रोटेशन इश्यू कोड के लिए exifInterface का उपयोग कर रहा हूं: कैमरे से कैप्चर की गई छवि अभिविन्यास समस्या का सामना करना।एंड्रॉइड फोन पर कैमरा कैप्चर की गई छवि के साथ अभिविन्यास समस्या का सामना करना

  • फ़ाइल से एक बिटमैप बनाएं
Bitmap b = BitmapFactory.decodeFile(imagePath); 
  • उचित स्तर पर यह स्केलिंग द्वारा बिटमैप का आकार बदलें
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); 
  • छवि
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); 
} 
  • सहेजें नया बिटमैप के हैंडल उन्मुखीकरण
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); 

संकल्प रोटेशन जारी करने के लिए काम नहीं कर रहा यह कोड, मुझे दिशानिर्देश दे कृपया। एलजी उपकरणों पर यह हमेशा 0 ओरिएंटेशन लौटा रहा है, सैमसंग डिवाइस 6 और 1.

एचटीसी, मोटोरोला, सैमसंग, सोनी और एलजी जैसे सभी उपकरणों के साथ इस समस्या को कैसे ठीक करें।

मैं आप सभी का आभारी हूं कृपया मेरी मदद करें।

उत्तर

7

आप इस कार्य का उपयोग वही काम करने के लिए कर सकते हैं जो आपको चाहिए। इस गतिविधि को अपनी गतिविधि या किसी भी उपयोग वर्ग में रखें और फ़ाइल पथ से बिटमैप प्राप्त करने के लिए इसे कॉल करें।

मैं अपने आवेदन में इस फ़ंक्शन का उपयोग कर रहा हूं और मेरे प्राइम टेस्टिंग डिवाइस एलजी हैं।

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

क्या आपने एचटीसी पर भी परीक्षण किया था? – user991429

+0

हां, मैं एचटीसी एक्सप्लोरर के साथ ऐप का भी परीक्षण करता हूं और यह एलजी ऑप्टिमस ब्लैक के रूप में ठीक चलता है। @ user991429 – MKJParekh

+0

@MKJParekh: महान काम, धन्यवाद :) – Aerrow

संबंधित मुद्दे