android选择图片在ImageView上显示,调用setImageBitmap,如何是好?

发布于 2022-09-01 12:34:48 字数 2023 浏览 16 评论 0

我想选择图片,在ImageView上显示。

先说明一下,百度上搜索一番发现setImageUri这个方法是不建议用的(因为有某种延迟?)

大家都建议使用setImageBitmap这个方法。

我的做法是

点击“选择”按钮后,弹出图片选择界面:

Intent intent=new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("image/*");
startActivityForResult(intent,1);

然后在返回的结果中显示图片:

public void onActivityResult(int requestCode,int resultCode,Intent data)
{
    if(resultCode==Activity.RESULT_OK && requestCode==1)
    {
            try
            {
                // 获得图片的uri
                Uri originalUri=data.getData();
                // 将图片内容解析成字节数组
                byte[] mContent=readStream(resolver.openInputStream(Uri.parse(originalUri.toString())));
                // 将字节数组转换为ImageView可调用的Bitmap对象
                Bitmap myBitmap=getPicFromBytes(mContent,null);
                // //把得到的图片绑定在控件上显示
                iv.setImageBitmap(myBitmap);
            }catch(Exception e)
            {
                System.out.println(e.getMessage());
            }
    }
}

跟踪了一下,一切运行顺利,数据也顺利拿到,但是iv.setImageBitmap(myBitmap);之后没有任何反映。。。。

请问各位老师,是否我还有啥操作漏掉了。。。

或者还有其他更好的方法,就请分享给我吧。

readStream(),和getPicFromBytes() 如下:

public static Bitmap getPicFromBytes(byte[] bytes,
                                     BitmapFactory.Options opts) {
    if (bytes != null)
        if (opts != null)
            return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,
                    opts);
        else
            return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
    return null;
}

public static byte[] readStream(InputStream inStream) throws Exception {
    byte[] buffer = new byte[1024];
    int len = -1;
    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    while ((len = inStream.read(buffer)) != -1) {
        outStream.write(buffer, 0, len);
    }
    byte[] data = outStream.toByteArray();
    outStream.close();
    inStream.close();
    return data;

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

老子叫无熙 2022-09-08 12:34:49

我是这样拿图库的图片的:
1、打开

 Intent intent = new Intent(Intent. ACTION_PICK,

                   android.provider.MediaStore.Images.Media. EXTERNAL_CONTENT_URI);

          intent.setType( "image/*");

          startActivityForResult(intent, RESULT_LOAD_IMAGE);

2、回调的方法

    @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(); 



                 iv.setImageBitmap(BitmapFactory.decodeFile(picturePath));

                 tv.setText(picturePath);



             } 
十秒萌定你 2022-09-08 12:34:49

有个问题,就是为什么iv.setImageBitmap(bmp);显示不了图片,而我注释了AndroidManifest.xml文件中的users-sdk中的android:targetSdkVersion就会出现了,有什么办法不用注释就显示呢?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文