如何将 Gallery 中的图像显示到 ImageView?
How to show image from Gallery to ImageView?
我想将从图库中截取的图像显示到图像视图中。但这并没有发生。我不明白为什么。我可以很好地使用相机功能并在相机的图像视图中看到图像,但看不到从画廊拍摄的图像。你们能帮帮我吗?
这是我的代码
protected Button mFromCamera;
protected Button mFromGallery;
protected ImageView mImageView;
private static final int CAMERA_REQUEST = 1888;
private static final int SELECT_PHOTO = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Initialize ImageView
mImageView = (ImageView) findViewById(R.id.ImgPrev);
//Initialize Camera
mFromCamera = (Button) findViewById(R.id.FromCamera);
//use camera
mFromCamera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
} //use camera end
});
//initialize button
mFromGallery = (Button) findViewById(R.id.FromGallery);
//pick a photo
mFromGallery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, SELECT_PHOTO);
}
});//pick a photo end
}
//previewing Image
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
//from the gallery
case SELECT_PHOTO:
if (requestCode == SELECT_PHOTO && resultCode == RESULT_OK && null!= data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
mImageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
}
break;
//from the camera
case CAMERA_REQUEST:
if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
mImageView.setImageBitmap(photo);
}
break;
}
}//Preview Image End
唯一的问题是,从图库中选择的图像没有显示在 ImageView 中。我试过像处理 "CAMERA_REQUEST" 一样处理 "SELECT_PHOTO" 的情况。结果也不尽如人意。
可能 BitmapFactory.decodeFile(picturePath)
returns 无效。核实。并检查您是否在 AndroidManifest.xml 中添加了权限:
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_EXTERNAL_STORAGE
BitmapFactory.decodeFile(String filePath) 在文档中:
http://developer.android.com/reference/android/graphics/BitmapFactory.html#decodeFile(java.lang.String)
Returns:
生成的解码位图,或 null 如果路径为空或无法解码。
我想将从图库中截取的图像显示到图像视图中。但这并没有发生。我不明白为什么。我可以很好地使用相机功能并在相机的图像视图中看到图像,但看不到从画廊拍摄的图像。你们能帮帮我吗?
这是我的代码
protected Button mFromCamera;
protected Button mFromGallery;
protected ImageView mImageView;
private static final int CAMERA_REQUEST = 1888;
private static final int SELECT_PHOTO = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Initialize ImageView
mImageView = (ImageView) findViewById(R.id.ImgPrev);
//Initialize Camera
mFromCamera = (Button) findViewById(R.id.FromCamera);
//use camera
mFromCamera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
} //use camera end
});
//initialize button
mFromGallery = (Button) findViewById(R.id.FromGallery);
//pick a photo
mFromGallery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, SELECT_PHOTO);
}
});//pick a photo end
}
//previewing Image
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
//from the gallery
case SELECT_PHOTO:
if (requestCode == SELECT_PHOTO && resultCode == RESULT_OK && null!= data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
mImageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
}
break;
//from the camera
case CAMERA_REQUEST:
if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
mImageView.setImageBitmap(photo);
}
break;
}
}//Preview Image End
唯一的问题是,从图库中选择的图像没有显示在 ImageView 中。我试过像处理 "CAMERA_REQUEST" 一样处理 "SELECT_PHOTO" 的情况。结果也不尽如人意。
可能 BitmapFactory.decodeFile(picturePath)
returns 无效。核实。并检查您是否在 AndroidManifest.xml 中添加了权限:
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_EXTERNAL_STORAGE
BitmapFactory.decodeFile(String filePath) 在文档中: http://developer.android.com/reference/android/graphics/BitmapFactory.html#decodeFile(java.lang.String)
Returns: 生成的解码位图,或 null 如果路径为空或无法解码。