我使用以下代码从手机图库中选取图片:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),
USE_LIBRARY_PIC_REQUEST);
在onActivityResult()中,它提供了文件路径,我尝试使用filepath获取位图,但它总是在横向视图中提供它。有没有办法在纵向视图中获取该图像? 获取文件路径的代码:
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
这就是我使用文件路径获取位图的方法:
Bitmap bmp=BitmapFactory.decodeFile(selectedImagePath);
答案 0 :(得分:7)
要获得原始图像,您可以使用此方法。
public static Bitmap getBitmap(String uri, Context mContext) {
Bitmap bitmap = null;
Uri actualUri = Uri.parse(uri);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inTempStorage = new byte[16 * 1024];
options.inSampleSize = 2;
ContentResolver cr = mContext.getContentResolver();
float degree = 0;
try {
ExifInterface exif = new ExifInterface(actualUri.getPath());
String exifOrientation = exif
.getAttribute(ExifInterface.TAG_ORIENTATION);
bitmap = BitmapFactory.decodeStream(cr.openInputStream(actualUri),
null, options);
if (bitmap != null) {
degree = getDegree(exifOrientation);
if (degree != 0)
bitmap = createRotatedBitmap(bitmap, degree);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
public static float getDegree(String exifOrientation) {
float degree = 0;
if (exifOrientation.equals("6"))
degree = 90;
else if (exifOrientation.equals("3"))
degree = 180;
else if (exifOrientation.equals("8"))
degree = 270;
return degree;
}
public static Bitmap createRotatedBitmap(Bitmap bm, float degree) {
Bitmap bitmap = null;
if (degree != 0) {
Matrix matrix = new Matrix();
matrix.preRotate(degree);
bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),
bm.getHeight(), matrix, true);
}
return bitmap;
}