android 下载图片出现SkImageDecoder::Factory returned null,BitmapFactory.Options压缩

网上有很多说是因为没有采用HttpClient造成的,尼玛,我改成了HttpClient 请求图片之后还是会出现SkImageDecoder::Factory returned null,

但是直接使用

bitmap = BitmapFactory.decodeStream(is);  是正常的,但解决不了图片大内存溢出的问题

解决办法:

重新获取一次流,注意看代码(红色部分):

/**
     * 根据网络url获取bitmap对象
     * @param url
     * @param width  要获取的宽度
     * @param height 要获取的高度 防止内存溢出
     * @return
     */
    public static Bitmap returnBitMap(String url, int width,int height) {

        Bitmap bitmap = null;
        try {
            HttpGet httpRequest = new HttpGet(url);
            Log.d("returnbitmap", "url="+url);
            HttpClient httpclient = new DefaultHttpClient();
            HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
            HttpEntity entity = response.getEntity();
            BufferedHttpEntity bufferedHttpEntity = new BufferedHttpEntity(entity);
            InputStream is = bufferedHttpEntity.getContent();
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true; //只获取图片的高宽
            int scale = 1;
            BitmapFactory.decodeStream(is,null,options);
            int w = options.outWidth;
            int h = options.outHeight;
            Log.d("returnbitmap", "w="+w+";h="+h+";width="+width+";height="+height);
            while(true)
            {
                if ((width>0 && w < width) || (height>0 && h < height))
                {
                    break;
                }
                w /= 2;
                h /= 2;
                scale *= 2;
            }
            options.inJustDecodeBounds = false;
            options.inSampleSize = scale;
            is = bufferedHttpEntity.getContent();//重新获取流
            bitmap = BitmapFactory.decodeStream(is,null,options);
            Log.d("returnbitmap", "bitmap="+bitmap+(bitmap==null?"bitmap is null":"bitmap is not null"));
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
         catch (OutOfMemoryError e) {
             e.printStackTrace();
         }
        return bitmap;
    }

这样就可以正常下载并显示了,噢耶!!!

时间: 2024-10-05 06:17:53

android 下载图片出现SkImageDecoder::Factory returned null,BitmapFactory.Options压缩的相关文章

SkImageDecoder::Factory returned null

最近在做大图片的加载,途中遇到这样一个问题: 图片在压缩文件中,我先用BitmapFactory取图片尺寸,计算之后再按照合适尺寸取出Bitmap,代码如下: options.inJustDecodeBounds = true; BitmapFactory.decodeStream(imgInputStream, null, options); options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

Android实战简易教程-第九枪(BitmapFactory.Options对资源图片进行缩放)

我们知道,我们编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常.因此在展示高分辨率图片的时候,最好先将图片进行压缩,压缩后的图片大小应该和用来展示它的控件大小相近,这样可以兼顾显示效果和内存占用. BitmapFactory.Options这个类,有一个字段叫做 inJustDecodeBounds .SDK中对这个成员的说明是这样的: If set to true, the decoder will return null (no bitm

王立平--AES加密图片实现 SkImageDecoder::Factory return null

这个问题是在加密图片,存入sd卡,在解密出来展示,出现的.我个人研究了非常久没解决.最后经过高人指点,最终攻克了. 在此,拿出来分享,希望各位少走弯路. 我之前的设计思路是:(能够不看哦) 1.把图片从drawable读入成bitmap 2.bitmap-->byte 3.调用AES的byte加密算法. 4.加密成byte,在转化为string 5,把string存入sd卡. -------------------------------- 4,从sd卡获取string. 5.string-->

BitmapFactory.Options详解

public Bitmap inBitmap If set, decode methods that take the Options object will attempt to reuse this bitmap when loading content. public int inDensity The pixel density to use for the bitmap. public boolean inDither If dither is true, the decoder wi

BitmapFactory.Options.inSampleSize 的用法

BitmapFactory.decodeFile(imageFile); 用BitmapFactory解码一张图片时,有时会遇到该错误.这往往是由于图片过大造成的.要想正常使用,则需要分配更少的内存空间来存储. BitmapFactory.Options.inSampleSize 设置恰当的inSampleSize可以使BitmapFactory分配更少的空间以消除该错误.inSampleSize的具体含义请参考SDK文档.例如: BitmapFactory.Options opts = new

Android中运行的错误:java.lang.UnsatisfiedLinkError: Couldn&#39;t load locSDK3: findLibrary returned null.

今天在使用百度地图的时候运行发现报错: 明明已经加入了liblocSDK3.so,但总是无法定位.提示错误java.lang.UnsatisfiedLinkError: Couldn't load locSDK3: findLibrary returned null. 网上找了很多的资料找到一个方法: 在libs下新建一个armeabi-v7a,然后将liblocSDK3.so复制一份到该文件夹" 如果这个不行,那么新建一个armeabi文件夹再放入liblocSDK3.so就可以了. Andr

findlibrary returned null产生的联想,Android ndk开发打包时我们应该如何注意平台的兼容(x86,arm,arm-v7a)

很多朋友在开发Android JNI的的时候,会遇到findlibrary returned null的错误,因为某种原因,so没有打包到apk中.下面浅析下引起该错误的原因以及平台兼容性问题. 一.没有将so打包到apk中的原因. 当你发现到findlibrary returned null的错误时,其实最直接的解决办法就是解压apk,看看apk中的x86.armeabi.armeabi-v7a文件夹中是否有对应的so,此时你可能在对应的文件夹下发现少了so,然后再去查原因即可. 一般有两方面

Android BitmapFactory图片压缩处理(大位图二次采样压缩处理)

Android实际开发中,在加载大量图片的时候,比如ViewPager.GridView.ListView中,加载了大量的比较大图片就容易出现OOM(内存溢出)的异常,这是因为一个应用的最大内存使用只有16M,超过了这个值,就会出现OOM.所以我们实际开发中,要想避免OOM出现就要对相应的图片进行压缩处理. 本文即使用了BitmapFactory和BitmapFactory.Option这两个类,对图片进行相应的尺寸压缩处理.经测试,成功解决了未压缩图片之前出现的OOM异常. 实现效果图: 本D

android下载网络图片并缓存

异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ImageCallback callback); public void downloadImage(final String url, final boolean cache2Memory, final ImageCallback callback); public void setCache2F