2015-08-01 6 views
0

Я разрабатываю приложение для камеры, моя проблема заключается в том, что на некоторых устройствах изображения, сделанные камерой, вращаются при настройке изображения в изображение, поэтому я искал решение, и я нашел решение по этой ссылке. camera intent auto rotate to 90 degree. Моя проблема в том, когда я называю метод для создания повернутого растрового изображения, он показывает NPE на следующей строкеИсключение Null Pointer на Bitmap.createBitmap в Android

Bitmap rotatedBitmap = Bitmap.createBitmap(bitencoded, 0, 0, bitencoded.getWidth(), 
      bitencoded.getHeight(), matrix, true); 

Полный код

private Bitmap rotateCam() 
{ 
    Matrix matrix = new Matrix(); 
    matrix.postRotate(getImageOrientation(picturePath)); 

    Bitmap rotatedBitmap = Bitmap.createBitmap(bitencoded, 0, 0, bitencoded.getWidth(), 
      bitencoded.getHeight(), matrix, true); 
    imageView.setImageBitmap(rotatedBitmap); 
    return rotatedBitmap; 
} 

LogCat

java.lang.NullPointerException 
     at project1.me.com.update.ImageUploadActivity.rotateCam(ImageUploadActivity.java:235) 
     at project1.me.com.update.ImageUploadActivity.onCreate(ImageUploadActivity.java:182) 
     at android.app.Activity.performCreate(Activity.java:5206) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 
     at android.app.ActivityThread.access$700(ActivityThread.java:140) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4921) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) 
     at dalvik.system.NativeStart.main(Native Method) 

OnCreate

byte[] data = picturePath.getBytes("UTF-8"); 
      String base64PicPath = Base64.encodeToString(data, Base64.DEFAULT); 

      bitencoded= stringToBitMap(base64PicPath); 
      try 
      { 
       rotateCam(); 
       Log.e(" Rotated", "Method called"); 
      } 
      catch(Exception e) 
      { 
      Log.e("Not Rotated","Method not called"); 
      e.printStackTrace(); 
      Log.e(e.getClass().getName(), e.getMessage(), e); 
     } 

getImageOrie ntation()

public static int getImageOrientation(String imagePath){ 
    int rotate = 0; 
    try { 

     File imageFile = new File(imagePath); 
     ExifInterface exif = new ExifInterface(
       imageFile.getAbsolutePath()); 
     int orientation = exif.getAttributeInt(
       ExifInterface.TAG_ORIENTATION, 
       ExifInterface.ORIENTATION_NORMAL); 

     switch (orientation) { 
      case ExifInterface.ORIENTATION_ROTATE_270: 
       rotate = 270; 
       break; 
      case ExifInterface.ORIENTATION_ROTATE_180: 
       rotate = 180; 
       break; 
      case ExifInterface.ORIENTATION_ROTATE_90: 
       rotate = 90; 
       break; 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return rotate; 
} 

Я новичок, я не мог найти причины NPE.Can anybode помочь мне? .Thanx заранее.

+1

'bitencoded' является нулевым – Blackbelt

+0

Я преобразовал ImagePath, чтобы растровое изображение, и я установил, что растровый этот метод, но все же NPE на следующий line.Can вас Помогите? – Tom

+0

Пожалуйста, см. Мое редактирование – Tom

ответ

1

Используйте этот метод для преобразования растрового изображения.

private Bitmap decodeFile(String filePath) { 

    // Decode image size 
    try { 

     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 

     BitmapFactory.decodeFile(filePath, o); 
     final int REQUIRED_SIZE = 1024; 
     int width_tmp = o.outWidth, height_tmp = o.outHeight; 
     int scale = 1; 
     while (true) { 
      if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE) 
       break; 
      width_tmp /= 2; 
      height_tmp /= 2; 
      scale *= 2; 
     } 

     o.inJustDecodeBounds = false; 


     // Decode with inSampleSize 

     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize = scale; 
     bitmap = BitmapFactory.decodeFile(filePath, o2); 

    } 
    catch (Exception e) 
    { 
     Log.e(e.getClass().getName(), e.getMessage(), e); 
    } 
    return bitmap; 
} 

И OnCreate

bitmap= decodeFile(picturePath); 

      rotateCam(); 

набор ImageView на rotateCam method.Hope это поможет.

rotateCam должно быть, как это

public void rotateCam(){ 


Matrix matrix = new Matrix(); 
matrix.postRotate(getImageOrientation(picturePath)); 
Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), 
     bitmap.getHeight(), matrix, true); 
imageView = (ImageView) findViewById(R.id.imgView); 
imageView.setImageBitmap(rotatedBitmap); 

} 
0
Bitmap bitencoded=null; 
bitencode.getWidth(); 

Вы вызываете метод getWidth() в нулевой ссылке, битокодированный. должны делать это вместо того,

Bitmap bitencode = BitmapFactory.decodeResource(getResources(), R.drawable.yourBitmap); 

затем,

bitencode.getWidth(); 
Смежные вопросы