码迷,mamicode.com
首页 > 移动开发 > 详细

Android 图片比较

时间:2016-07-20 17:51:11      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

Android中图片比较大致的流程如下:

  • 将Drawable对象转化成Bitmap对象。(实际比较的是Bitmap对象,假设为B1和B2)
  • 将B1和B2中的像素取出,分别放在2个数组中。(实际存储的是Bitmap的color值,是一个int值)
  • 首先比较这2个数组的长度,如果不等,则认为2个图片不相等。
  • 如果这2个数组的长度相等,则继续比较数组中的每个对应的color值,如果有10个以上对应的color值不相等(我们最多允许有10个对应的color值不相等),则认为2个图片不相等。
  • 如果以上2种情况都成功,则认为2个图片相等。

实现的代码如下:

Bitmap actualBitmap = ((BitmapDrawable)actualDrawable).getBitmap();
Bitmap expectedBitmap = ((BitmapDrawable)expectedDrawable).getBitmap();
public static boolean isEqual(Activity activity, Bitmap expectedBitmap, Bitmap actualBitmap) {
int nonMatchingPixels = 0;
int allowedMaxNonMatchPixels = 10;
if(expectedBitmap == null || actualBitmap == null || activity == null) {return false;}
int[] expectedBmpPixels = new int[expectedBitmap.getWidth() * expectedBitmap.getHeight()];
expectedBitmap.getPixels(expectedBmpPixels, 0, expectedBitmap.getWidth(), 0, 0, expectedBitmap.getWidth(), expectedBitmap.getHeight());
int[] actualBmpPixels = new int[actualBitmap.getWidth() * actualBitmap.getHeight()];
actualBitmap.getPixels(actualBmpPixels, 0, actualBitmap.getWidth(), 0, 0, actualBitmap.getWidth(), actualBitmap.getHeight());
if (expectedBmpPixels.length != actualBmpPixels.length) {return false;}
for (int i = 0; i < expectedBmpPixels.length; i++) {
if (expectedBmpPixels[i] != actualBmpPixels[i]) {nonMatchingPixels++;}
}
if (nonMatchingPixels > allowedMaxNonMatchPixels) {return false;}
return true;
}

 

Android 图片比较

标签:

原文地址:http://www.cnblogs.com/zhujiabin/p/5688854.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!