Android中如何把网络资源图片转化成bitmap

本文介绍了在Android项目中如何实现微信分享网络图片的功能。首先,通过网络资源图片路径创建Bitmap,然后将网络图片下载到本地并保存为Bitmap。核心方法包括将网络资源图片转换为Bitmap以及下载图片到本地。代码示例展示了如何在子线程中进行这些操作,以避免主线程阻塞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在android项目开发中,实现微信分享功能会涉及图片的分享,但缩略图分享官方仅支持加载本地的bitmap,那么问题就来了,如果是网络图片那要如何操作呢?想法当然是有的,就是把网络资源图片下载到本地并保存成bitmap不就可以了吗?那么如何去实现呢,下面就来说说吧!

 /**
     * todo 将网络资源图片转换为Bitmap
     * @param imgUrl 网络资源图片路径
     * @return Bitmap
     * 该方法调用时要放在子线程中
     */
    public Bitmap netToLoacalBitmap(String imgUrl){
        Bitmap bitmap = null;
        InputStream in=null;
        BufferedOutputStream out = null;
        try{
            in = new BufferedInputStream(new URL(imgUrl).openStream(),1024);
            final ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
            out = new BufferedOutputStream(dataStream,1024);
            copy(in,out);
            out.flush();
            byte[] data = dataStream.toByteArray();
            bitmap = BitmapFactory.decodeByteArray(data,0,data.length);
            data = null;
            return bitmap;
        }catch (IOException e){
            e.printStackTrace();
            return null;
        }
    }

    private void copy(InputStream in, OutputStream out)
            throws IOException {
        byte[] b = new byte[1024];
        int read;
        while ((read = in.read(b)) != -1) {
            out.write(b, 0, read);
        }
    }

该方法调用时要放在子线程中

 /**
     * todo 把网络图片下载到本地保存成Bitmap图片
     * @param imgUrl 网络图片
     */
    private void getNetOrBitmap(String imgUrl){
        try{
            new Thread(){
                @Override
                public void run() {
                    super.run();
                    // 涉及到下载图片,调用netToLoacalBitmap时要放在子线程中
                    bitmap = netToLoacalBitmap(imgUrl);

                }
            }.start();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

使用

 //下载网络图片到本地,并转成Bitmap图片(用于分享)
   String imgUrl = null;
   try {
          imgUrl = Helper.fixImgUrl(goodsList.getString("image"));   //网络图片
  } catch (JSONException e) {
           e.printStackTrace();
   }
  getNetOrBitmap(imgUrl); //下载图片                       
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值