从图库中获取图像并在 ImageView 中显示
Posted
技术标签:
【中文标题】从图库中获取图像并在 ImageView 中显示【英文标题】:Get Image from the Gallery and Show in ImageView 【发布时间】:2016-11-16 01:39:23 【问题描述】:我需要通过单击按钮从图库中获取图像并将其显示到图像视图中。
我的做法如下:
btn_image_button.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
getImageFromAlbum();
);
方法定义如下:
private void getImageFromAlbum()
try
Intent i = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE);
catch(Exception exp)
Log.i("Error",exp.toString());
活动结果方法是
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && 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();
try
bmp = getBitmapFromUri(selectedImage);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
image_view.setImageBitmap(bmp);
//to know about the selected image width and height
Toast.makeText(MainActivity.this, image_view.getDrawable().getIntrinsicWidth()+" & "+image_view.getDrawable().getIntrinsicHeight(), Toast.LENGTH_SHORT).show();
问题
我面临的问题是当图像分辨率很高时,假设图像大小为 5mp 到 13mp。它不会加载并显示在图像视图中。
但宽度和高度较低的图像已成功加载到图像视图中!
谁能告诉我代码的任何问题以及我做错了什么?我只想从图库中导入相机图像并在图像视图中显示它们!
【问题讨论】:
看看developer.android.com/training/displaying-bitmaps/… 您是否收到错误消息?还是无法加载图片? 它只是没有任何错误地加载图像! @antonio 我只想导入图像并在 imageview 中显示如何处理位图? 【参考方案1】:你可以试试这个。
将此代码粘贴到您的按钮单击事件中。
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, RESULT_LOAD_IMG);
下面的代码是你的活动结果
@Override
protected void onActivityResult(int reqCode, int resultCode, Intent data)
super.onActivityResult(reqCode, resultCode, data);
if (resultCode == RESULT_OK)
try
final Uri imageUri = data.getData();
final InputStream imageStream = getContentResolver().openInputStream(imageUri);
final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
image_view.setImageBitmap(selectedImage);
catch (FileNotFoundException e)
e.printStackTrace();
Toast.makeText(PostImage.this, "Something went wrong", Toast.LENGTH_LONG).show();
else
Toast.makeText(PostImage.this, "You haven't picked Image",Toast.LENGTH_LONG).show();
希望对你有帮助。
【讨论】:
正在旋转图像? 是的,我也遇到了同样的问题。图片是随机旋转的。 如果您有旋转问题,请查看我的回答:***.com/a/64013845/8491926【参考方案2】:我使用以下代码: 此代码用于启动画廊活动。
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, GALLERY_REQUEST);
并得到结果:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == Activity.RESULT_OK)
switch (requestCode)
case GALLERY_REQUEST:
Uri selectedImage = data.getData();
try
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), selectedImage);
carImage.setImageBitmap(bitmap);
catch (IOException e)
Log.i("TAG", "Some exception " + e);
break;
别忘了在 AndroidManifest 中声明权限。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
【讨论】:
感谢 Anton 在 *** 上提供答案。通过解释步骤或原因,您可以大大提高答案的质量。不过,请投赞成票。 @D.Desai 你在 Fragment 中使用这个吗?如果您想在活动中使用此代码,请删除“getActivity()” @Anton 这个对我有用,谢谢。【参考方案3】:因为 OnActivityResult 方法已被弃用,如今使用 AndroidX Activity 的正确方法是 Activity Result APIs,而推荐的方法是 see docs
"registerForActivityResult() 接受一个 ActivityResultContract 和一个 ActivityResultCallback 并返回一个您将使用的 ActivityResultLauncher启动其他活动。”
ActivityResultLauncher<String> mGetContent = registerForActivityResult(new ActivityResultContracts.GetContent(),
new ActivityResultCallback<Uri>()
@Override
public void onActivityResult(Uri uri)
previewImage.setImageURI(uri);
);
然后简单地调用
mGetContent.launch("image/*");
在需要时。
【讨论】:
【参考方案4】:我尝试了上述所有解决方案,但它们对我不起作用。我在 tutorialspoint 网站上看到了一个代码,它对我很有效,这就是代码:
final int PICK_IMAGE = 100;
Button button = findViewById(R.id.button33);
button.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Intent gallery = new Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(gallery, PICK_IMAGE);
);
@Override
protected void onActivityResult(int reqCode, int resultCode, Intent data)
super.onActivityResult(reqCode, resultCode, data);
Uri imageUri;
ImageView imageView = findViewById(R.id.image_main_galary);
if (resultCode == RESULT_OK && reqCode == 100)
imageUri = data.getData();
imageView.setImageURI(imageUri);
最重要的问题:不要忘记PERMISSION:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
【讨论】:
以上是关于从图库中获取图像并在 ImageView 中显示的主要内容,如果未能解决你的问题,请参考以下文章