0

I am developing a camera application,my problem is that ,On some devices the images taken by the camera is rotating, when setting it to an imageview ,So that i have searched for a solution ,and i found a solution from this link.camera intent auto rotate to 90 degree. My problem is when i call the method to generate rotated bitmap image ,it shows a NPE on the following line

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

Full code

 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);
        }

getImageOrientation()

 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;
}

I am a beginner ,i could not find reason for NPE.Can anybode help me out?.Thanx in advance.

Community
  • 1
  • 1
Tom
  • 296
  • 6
  • 22

2 Answers2

1

Use this Method to convert bitmap.

 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;
}

And onCreate():

bitmap = decodeFile(picturePath);
rotateCam();

Set the ImageView in 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);
 }
knjk04
  • 115
  • 2
  • 11
Jack
  • 1,825
  • 3
  • 26
  • 43
0
Bitmap bitencoded=null;
bitencode.getWidth();

You are calling method getWidth() on a null reference bitencoded. Should be doing this instead,

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

then,

bitencode.getWidth();
Parag Kadam
  • 3,620
  • 5
  • 25
  • 51