为了账号安全,请及时绑定邮箱和手机立即绑定

如何从URI中获取位图?

如何从URI中获取位图?

POPMUISE 2019-07-08 17:25:37
如何从URI中获取位图?如何从URI中获取Bitmap对象(如果我成功地将它存储在/data/data/MYFOLDER/myimage.png或file///data/data/MYFOLDER/myimage.png在我的应用程序中使用它?有没有人知道如何做到这一点?
查看完整描述

3 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

. . 重要信息:请参见下面@MarkIngram和@pjv的回答以获得更好的解决方案。 . .

你可以试试这个:

public Bitmap loadBitmap(String url){
    Bitmap bm = null;
    InputStream is = null;
    BufferedInputStream bis = null;
    try 
    {
        URLConnection conn = new URL(url).openConnection();
        conn.connect();
        is = conn.getInputStream();
        bis = new BufferedInputStream(is, 8192);
        bm = BitmapFactory.decodeStream(bis);
    }
    catch (Exception e) 
    {
        e.printStackTrace();
    }
    finally {
        if (bis != null) 
        {
            try 
            {
                bis.close();
            }
            catch (IOException e) 
            {
                e.printStackTrace();
            }
        }
        if (is != null) 
        {
            try 
            {
                is.close();
            }
            catch (IOException e) 
            {
                e.printStackTrace();
            }
        }
    }
    return bm;}

但是请记住,这个方法应该只从线程中调用(而不是GUI线程)。我是一个AsyncTask。


查看完整回答
反对 回复 2019-07-08
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

以下是正确的做法:

protected void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK)
    {
        Uri imageUri = data.getData();
        Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
    }}

如果您需要加载非常大的映像,下面的代码将其加载到Tiles中(避免大内存分配):

BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(myStream, false); 
 Bitmap region = decoder.decodeRegion(new Rect(10, 10, 50, 50), null);

见答案这里


查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 596 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信