我SDCard里有一张几十兆或者几百兆的图片 ,我想把他显示出来, 应该如可处理呢?  希望有这方面经验的人能够指点我下(注意是“一张”大的图片)Android手机平板图片经验

解决方案 »

  1.   


    太笼统了  ,可以详细点儿不。比如一开始获得bitmap对象都会出现内存溢出
      

  2.   

    AVM只会给应用分的内存是固定的,手机才多大内存,操作那么大的图片,都放不下,只能读进来一部分然后操作,然后释放再读下一部分
      

  3.   

    不好意思 ,回复晚了,可以留个邮箱不,给你发个图[email protected]
      

  4.   

    本人菜鸟,可以提供个方法吗?我试过的方法都OOM
      

  5.   

    不好意思 ,回复晚了,可以留个邮箱不,给你发个图[email protected]已发送,请接收
      

  6.   

    BitmapFactory.Options o = new BitmapFactory.Options();
    o.inJustDecodeBounds = true;
     BitmapFactory.decodeStream(
    new FileInputStream(new File(path_image)), null, o);
    int w = o.outWidth;
    int h = o.outHeight;
    int scale = 1;
    while (true) {
    if (w / 2 <= mWidth_image || h / 2 <= mWidth_image) {
    break;
    }
    w /= 2;
    h /= 2;
    scale *= 2;
    }
    o.inSampleSize = scale;
    o.inJustDecodeBounds = false;
     newBitmap = BitmapFactory.decodeStream(
    new FileInputStream(new File(path_image)), null, o);
    你可以参考一下,这个不会把图片加载到内存中,就可以获取宽和高。
      

  7.   

    public byte[] InputStreamToByte(InputStream iStrm) throws IOException {
    ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
    int ch;
    while ((ch = iStrm.read()) != -1) {
    bytestream.write(ch);
    Log.i("xpf", "as=one writed" + bytestream.size() + " 剩余" + (Filel - bytestream.size()));
    }
    byte imgdata[] = bytestream.toByteArray();
    bytestream.close();
    return imgdata;
    }
    s
      

  8.   


    为什么我这  获取bitmap为空  第一次decodeStream时候就是空   文件确实在该路径下
      

  9.   


    为什么我这  获取bitmap为空  第一次decodeStream时候就是空   文件确实在该路径下
    你要注意injusetdecodebounds的设置,确定为false才会真正的加载图片到内存。
      

  10.   

    BitmapFactory.Options o = new BitmapFactory.Options();
                        o.inJustDecodeBounds = true;
                         BitmapFactory.decodeStream(
                                new FileInputStream(new File(path_image)), null, o);
                        int w = o.outWidth;
                        int h = o.outHeight;
                        int scale = 1;
                        while (true) {
                            if (w / 2 <= mWidth_image || h / 2 <= mWidth_image) {
                                break;
                            }
                            w /= 2;
                            h /= 2;
                            scale *= 2;
                        }
                        o.inSampleSize = scale;
                        o.inJustDecodeBounds = false;
                         newBitmap = BitmapFactory.decodeStream(
                                new FileInputStream(new File(path_image)), null, o);这种方式不会把图片加载到内存中吗,有何依据?
      

  11.   

    虚拟机可用内存很小。所以,可以考虑用jni搞。jni可用内存大得多。在jni里生成bitmap对象后返回。