zoukankan      html  css  js  c++  java
  • 关于大的Bitmap保存问题

    截取一帧640x480的bitmap,然后通过下面方式进行保存:

    try {
    fos = new FileOutputStream(f);
    Bitmap frame = Bitmap.createBitmap(SRV1VideoCommand.bframe, 0, 0, 640, 480, matrix, false);
    if(frame.compress(Bitmap.CompressFormat.PNG, 100, fos)){
    fos.flush();
    fos.close();
    }
    }
    catch (FileNotFoundException e) {e.printStackTrace();}
    catch (IOException e) {e.printStackTrace();}

    但执行到下面这一句时就停在这里了,也没什么错误信息输出:

    frame.compress(Bitmap.CompressFormat.PNG, 100, fos)

    但如果改成:

    frame.compress(Bitmap.CompressFormat.JPEG, 90, fos)

    则可以保存成功,但反复操作几次之后又不响应了。

    具体原因不太清楚,应该是与数据量有关。因为当指定PNG格式进行保存时,第二个“图片质量”参数其实是不起作用的,因为PNG没有压缩,所以数据量比较大。
    当使用JPEG时,第二个“图片质量”参数90就起作用了,图片会小很多。

    PNG格式与JPEG的100质量参数效果是一样的。

    如测试的是320x240图像,则保存PNG毫无压力;测试发现:
    1. 图片质量设为100,一副320x240的图像保存成文件大概30K
    2. 图片质量设为90,一副320x240的图像保存成文件大概10K

    由此可见,质量降低到90,图片数据量会减少很多,所以对于上面的640x480图像在设置成90参数的JPEG后就可以正确保存了。连续执行几次后可能由于资源释放不即时导致后面又不响应了。。。

    虽然这只是猜测,但大的bitmap保存不成功肯定是与数据量有关的。

  • 相关阅读:
    (40)C#windows服务控制
    (6)C#事务处理
    (1)sqlite基础
    bzoj 2456 mode
    bzoj 2763 [JLOI2011]飞行路线
    bzoj1010[HNOI2008] 玩具装箱toy
    bzoj1034 [ZJOI2008]泡泡堂BNB
    [bzoj1059] [ZJOI2007] 矩阵游戏 (二分图匹配)
    [bzoj1066] [SCOI2007] 蜥蜴
    bzoj1072 [SCOI2007]排列perm
  • 原文地址:https://www.cnblogs.com/wzc0066/p/2948364.html
Copyright © 2011-2022 走看看