Android-获取Bitmap对象的API效果差异对比

来源:互联网 发布:人工智能要学单片机吗 编辑:程序博客网 时间:2024/05/18 00:16

在Android中读取已知图像,获取Bitmap对象的方法主要有以下几种:

1,BitmapFactory.decodeResource();

2,BitmapFactory.decodeStream();

3,BitmapFactory.decodeFile();

对于这三个接口方法,我们也许很少去研究它们生成的Bitmap对象究竟跟原图又多大差异,这里对这个问题做个总结。


我对同一张照片两种格式分别作个测试:1.png/1.jpg

测试内容:

对1.png分别调用三个接口生成三个Bitmap对象a1,b1,c1,读取RGB值(ag1,bg1,cg1),跟原图1.png的RGB值计算累计差值Sa1,Sb1,Sc1;

对1.jpg分别调用三个接口生成三个Bitmap对象a2,b2,c2,读取RGB值(ag2,bg2,cg2),跟原图1.jpg的RGB值计算累计差值Sa2,Sb2,Sc2;

结果如下:

Sa1 = Sa2 = Sa3 = 0;

Sa2>Sc2>Sb2>T,(T>10);

上述测试对于不同图像依旧如此,这个结果说明一个问题:三个接口所生成的Bitmap对象,在jpg格式下都出现了一定的误差,在png情况下这个误差达到最小值。

也许你觉得这个误差不会影响使用,那是你使用的场合不要求精度,对于精确的 图像算法而言,这个误差足以影响一个算法的成败。

最后,说一下第三个接口,对于第三个接口,它有一个形式:BitmapFactory.decodeFile(String filename,Options op);

这个Option op参数中有个inPreferQualityOverSpeed的设置,如果你设置了这个属性,那么在jpg情况下,你的图像损失就会达到最小,几乎和png保持一致了,具体设置如下:

Options op = new Options();op.inPreferQualityOverSpeed = true;Bitmap temp = BitmapFactory.decodeFile(filename, op);
总结:对于专业做图像处理的朋友们,这一点也许对你很有帮助哦!


0 0
原创粉丝点击