解决方案 »

  1.   

    onPictureTaken()函数里面
    bitmap = BitmapFactory.decodeByteArray(data, 0,data.length); 
    这里试试用Bitmap.Options压缩下
      

  2.   

    我觉得你先把data.length打印出来看看。oom是解析图片出的问题,有可能是之前的图片太多没释放,也有可能解析数据本身太大。
      

  3.   

    之前打开的图片没有释放也是可能的.
    不过,还得觉得,应该是相机拍照的图片太大直接导致.
    在得到数据时,就先对图片进行压缩处理,再使用处理后的bitmap.
      

  4.   


    01-09 16:37:45.415: D/解码(28946): data.length=972705
      

  5.   

    我之所以没有先用Bitmap.Options压缩,是因为我们老板要求拍出来得照片清晰度要高。请问还有别的解决方案么
      

  6.   

    我之所以没有先用Bitmap.Options压缩,是因为我们老板要求拍出来得照片清晰度要高。请问还有别的解决方案么清晰高是追求的目标罢了,android不像ios,有很大的内在可控.
    现在的android手机,高清的照相机,拍出来的照片都几M一张,android的内存,开发人员也不能随便控制.本身这是android的短板.
    你再试试设置memoryCacheSize,把它设置大一些,但我觉得,不对图片进行压缩处理,这个问题还是不能解决,更何况,应用中图片显示和操作多的话,就更容易OOM了.
      

  7.   

    另外可以试试直接把data用inputstream保存在本地而不转为bitmap
    到要用的时候在适当压缩从本地读出来
    这样在本地保存的图片就不会被压缩
      

  8.   


    因为需求必须得先转为bitmap,因为下个界面就是图片预览与编辑
      

  9.   


    朋友问下这个memoryCacheSize的设置是哪个类里面的方法啊,弄了半天没弄出来
      

  10.   

    我之所以没有先用Bitmap.Options压缩,是因为我们老板要求拍出来得照片清晰度要高。请问还有别的解决方案么清晰高是追求的目标罢了,android不像ios,有很大的内在可控.
    现在的android手机,高清的照相机,拍出来的照片都几M一张,android的内存,开发人员也不能随便控制.本身这是android的短板.
    你再试试设置memoryCacheSize,把它设置大一些,但我觉得,不对图片进行压缩处理,这个问题还是不能解决,更何况,应用中图片显示和操作多的话,就更容易OOM了.
    朋友问下这个memoryCacheSize的设置是哪个类里面的方法啊,弄了半天没弄出来额,朋友,我的意思是设置内存大小,方法,不记得,你百一下,因为我正在写代码用到imageloader,所以,就写了这几个词.
    不过,如果你有大量图片下载或从本地读取,都可以用imageloader,它可以设置memoryCacheSize.
      

  11.   


    好的谢了,我再看看。实在不行的话,就只有用Bitmap.Options压缩下了
      

  12.   


    很遗憾经过上午的调试ImageLoader运用后,先成功的展示了手机相册里的图片,但跳往拍照界面后按下快门的瞬间  仍旧抛出了OOM。目前就只有用Bitmap.Options压缩下是试试了
      

  13.   


    很遗憾经过上午的调试ImageLoader运用后,先成功的展示了手机相册里的图片,但跳往拍照界面后按下快门的瞬间  仍旧抛出了OOM。目前就只有用Bitmap.Options压缩下是试试了那你就只有用这个了.
      

  14.   

    是的,我用这个Bitmap.Options压缩,发现清晰度变化不大,但是解决了OOM,估计是data太大了。早知道直接用就好了。 private final class TakePictureCallback implements PictureCallback {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
    String sdStatus = Environment.getExternalStorageState();
    if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
    // 检测sd是否可用
    Toast.makeText(PhotographActivity.this, "没有SD卡或SD卡不可用!",
    Toast.LENGTH_LONG).show();
    return;
    } else {
                 BitmapFactory.Options options = new BitmapFactory.Options();
                 options.inSampleSize = 2;// 图片宽高都为原来的2分之一,即图片为原来的4分之一
    Log.d("解码", "data.length=" + data.length);
    // 解码指定字节数组中的一个不变的位图
    ConfirmActivity.bitmap = BitmapFactory.decodeByteArray(data, 0,
    data.length, options);
    Log.d("解码", "1*******");
    Intent starEdit = new Intent(PhotographActivity.this,
    ConfirmActivity.class);
    startActivity(starEdit);
    }
    }
    }
      

  15.   

    是的,我用这个Bitmap.Options压缩,发现清晰度变化不大,但是解决了OOM,估计是data太大了。早知道直接用就好了。 private final class TakePictureCallback implements PictureCallback {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
    String sdStatus = Environment.getExternalStorageState();
    if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
    // 检测sd是否可用
    Toast.makeText(PhotographActivity.this, "没有SD卡或SD卡不可用!",
    Toast.LENGTH_LONG).show();
    return;
    } else {
                 BitmapFactory.Options options = new BitmapFactory.Options();
                 options.inSampleSize = 2;// 图片宽高都为原来的2分之一,即图片为原来的4分之一
    Log.d("解码", "data.length=" + data.length);
    // 解码指定字节数组中的一个不变的位图
    ConfirmActivity.bitmap = BitmapFactory.decodeByteArray(data, 0,
    data.length, options);
    Log.d("解码", "1*******");
    Intent starEdit = new Intent(PhotographActivity.this,
    ConfirmActivity.class);
    startActivity(starEdit);
    }
    }
    }
    现在的手机,拍的照片质量非常高,压缩一点,肉眼看上去不会出现明显的失真的.