Im trying to fix this issue which has got me going bonkers! Ive tried numerous codes but nothing seems to be working. Originally what happened is when I opened up the app in portrait view it would display the image in landscape view instead. But when I would open up the app in landscape view and take photo it would display in landscape...how it should. NOW, what I did, is I added another image view and gave it a rotation of 90 now when I take photo in portrait view, it display photo in portrait view, BUT when I take a picture in landscape view now, the photo is flipped:S what do you guys suggest?
This is main activity java
package com.makingmemad.apk; import android.app.Activity; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.media.ExifInterface; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import java.io.File; import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class MainActivity extends Activity { private String mFileUri; private final Context mContext = this; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btnbutton1 = (Button) findViewById(R.id.button1); btnbutton1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Uri uri = createPictureFile(); mFileUri = uri.getEncodedPath(); Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivityForResult(intent, 100); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 100 && resultCode == RESULT_OK) { if (mFileUri != null) { Intent intent = new Intent(mContext, SecondActivity.class); intent.putExtra("filepath", mFileUri); startActivity(intent); } } } private static File getOutputMediaFile(int type) { File mediaStorageDir = new File(Environment.getExternalStorageDirectory(), "DCIM/Camera"); if (!mediaStorageDir.exists()) { if (!mediaStorageDir.mkdirs()) { return null; } } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()); File mediaFile; if (type == 1) { // image mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg"); } else if (type == 2) { // video mediaFile = new File(mediaStorageDir.getPath() + File.separator + "VID_" + timeStamp + ".mp4"); } else { return null; } return mediaFile; } public Uri createPictureFile() { String storageState = Environment.getExternalStorageState(); if (storageState.equals(Environment.MEDIA_MOUNTED)) { File pictureDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); pictureDir = new File(pictureDir, "MyApp"); // Create the storage directory if it does not exist if (!pictureDir.exists()) { if (!pictureDir.mkdirs()) { Log.d("user", "failed to create directory"); return null; } } //Create a media file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); String fileName = pictureDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg"; File imageFile = new File(fileName); // Convert to URI and return return Uri.fromFile(imageFile); } else { Log.d("user", "No media mounted"); return null; } } } This is my acitivty_main.xml file
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:background="@drawable/bg" tools:context="com.MYAPPNAME.apk.MainActivity" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/textView1" android:layout_centerHorizontal="true" android:layout_marginBottom="86dp" android:text="LET'S BEGIN" android:textSize="20dp" android:textStyle="bold" android:typeface="serif" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="72dp" android:text="Before you begin, PLEASE NOTE that this game is intended for entertainment purposes only." android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#fff" android:textSize="24dp" android:textStyle="bold" /> </RelativeLayout> This is my SecondActivity.java file
package com.MYAPPNAME.apk; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.widget.ImageView; import java.io.File; public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); Intent intent = getIntent(); String filepath = intent.getStringExtra("filepath"); BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 8; // down sizing image as it throws OutOfMemory Exception for larger images filepath = filepath.replace("file://", ""); // remove to avoid BitmapFactory.decodeFile return null File imgFile = new File(filepath); if (imgFile.exists()) { ImageView imageView = (ImageView) findViewById(R.id.imageView1); Bitmap bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath(), options); imageView.setImageBitmap(bitmap); } } } This is my activity_second.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:background="@drawable/bg" tools:context="com.MYAPPNAME.apk.SecondActivity" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="185dp" android:layout_alignParentRight="true" android:rotation="90"/> <ImageView android:id="@+id/imageView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/imageView1" android:layout_marginBottom="65dp" android:layout_marginRight="134dp" android:layout_toLeftOf="@+id/imageView1" /> </RelativeLayout> This is my ExifUtil file
package com.MYAPPNAME.apk; import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.os.Build; public class ExifUtil { public Bitmap rotateBitmap(String path) { Bitmap myBitmap = BitmapFactory.decodeFile(path); return ExifUtil.rotateBitmap(path, myBitmap); } /** * @see http://sylvana.net/jpegcrop/exif_orientation.html */ public static Bitmap rotateBitmap(String src, Bitmap bitmap) { try { int orientation = getExifOrientation(src); if (orientation == 1) { return bitmap; } Matrix matrix = new Matrix(); switch (orientation) { case 2: matrix.setScale(-1, 1); break; case 3: matrix.setRotate(180); break; case 4: matrix.setRotate(180); matrix.postScale(-1, 1); break; case 5: matrix.setRotate(90); matrix.postScale(-1, 1); break; case 6: matrix.setRotate(90); break; case 7: matrix.setRotate(-90); matrix.postScale(-1, 1); break; case 8: matrix.setRotate(-90); break; default: return bitmap; } try { Bitmap oriented = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); bitmap.recycle(); return oriented; } catch (OutOfMemoryError e) { e.printStackTrace(); return bitmap; } } catch (IOException e) { e.printStackTrace(); } return bitmap; } private static int getExifOrientation(String src) throws IOException { int orientation = 1; try { /** * if your are targeting only api level >= 5 * ExifInterface exif = new ExifInterface(src); * orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1); */ if (Build.VERSION.SDK_INT >= 5) { Class<?> exifClass = Class.forName("android.media.ExifInterface"); Constructor<?> exifConstructor = exifClass.getConstructor(new Class[] { String.class }); Object exifInstance = exifConstructor.newInstance(new Object[] { src }); Method getAttributeInt = exifClass.getMethod("getAttributeInt", new Class[] { String.class, int.class }); Field tagOrientationField = exifClass.getField("TAG_ORIENTATION"); String tagOrientation = (String) tagOrientationField.get(null); orientation = (Integer) getAttributeInt.invoke(exifInstance, new Object[] { tagOrientation, 1}); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } return orientation; } }
No comments:
Post a Comment