Android 图片比较
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 = ;
int allowedMaxNonMatchPixels = ;
if(expectedBitmap == null || actualBitmap == null || activity == null) {return false;}
int[] expectedBmpPixels = new int[expectedBitmap.getWidth() * expectedBitmap.getHeight()];
expectedBitmap.getPixels(expectedBmpPixels, , expectedBitmap.getWidth(), , , expectedBitmap.getWidth(), expectedBitmap.getHeight());
int[] actualBmpPixels = new int[actualBitmap.getWidth() * actualBitmap.getHeight()];
actualBitmap.getPixels(actualBmpPixels, , actualBitmap.getWidth(), , , actualBitmap.getWidth(), actualBitmap.getHeight());
if (expectedBmpPixels.length != actualBmpPixels.length) {return false;}
for (int i = ; i < expectedBmpPixels.length; i++) {
if (expectedBmpPixels[i] != actualBmpPixels[i]) {nonMatchingPixels++;}
}
if (nonMatchingPixels > allowedMaxNonMatchPixels) {return false;}
return true;
}
Android 图片比较的更多相关文章
- Android图片缓存之Lru算法
前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...
- Android图片处理
相信做Android开发的小伙伴对于Android图片压缩.裁剪一定有很深的印象,今天我将带领大家一起学习一下这个看着高深莫测的知识,以便再以后的学习.工作中可以帮助到大家. 首先我们看一下这个问题出 ...
- Android图片缓存之Glide进阶
前言: 前面学习了Glide的简单使用(Android图片缓存之初识Glide),今天来学习一下Glide稍微复杂一点的使用. 图片缓存相关博客地址: Android图片缓存之Bitmap详解 And ...
- Android图片缓存之初识Glide
前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...
- Android图片缓存之Bitmap详解
前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ...
- Android 图片压缩、照片选择、裁剪,上传、一整套图片解决方案
1.Android一整套图片解决方案 http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650820998&idx=1& ...
- 一步一步打造自己的Android图片浏览器(原创)
今天我们试着来制作一个自己的Android图片浏览器. 图片浏览器应该具有什么功能呢?鉴于不同的人不同的理解,这里提出一个基本的需求: 搜索手机内的所有图片,展示于一个列表中: 列表中展示的是图片的缩 ...
- Android 图片浏览器 从原来位置放大至全屏显示
android 图片浏览器 特点: 1.从网络加载图片,只需要传图片地址数组即可 2.点击图片,从原来位置放大至全屏 3.支持手势操作 4.完全自定义布局 项目源码请到GitHub下载:https:/ ...
- android图片处理方法
Java代码 //压缩图片大小 public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ...
- Android 图片文件操作、屏幕相关、.9图片的理解
一:Android图片操作 1.存储bitmap到本地文件系统 public static void bitmapToFile(Bitmap bitmap, String uri) { if(!ex ...
随机推荐
- word ppt excel文档转换成pdf
1.把word文档转换成pdf (1).添加引用 using Microsoft.Office.Interop.Word; 添加引用 (2).转换方法 /// <summary> /// ...
- java读写csv
http://blog.csdn.net/snn1410/article/details/9278887
- Java_LIST使用方法和四种遍历arrayList方法
1.List接口提供的适合于自身的常用方法均与索引有关,这是因为List集合为列表类型,以线性方式存储对象,可以通过对象的索引操作对象. List接口的常用实现类有ArrayList和Linked ...
- HDU 2501 Tiling_easy version(简单递推)
Tiling_easy version Problem Description 有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有 ...
- 解决Windows+Eclipse+Python错误: SyntaxError: Non-ASCII character
这个问题出现的原因是在文中使用了中文或者其他的非英文字符 最简单的解决办法: 在文件的第一行加上编码表示,切记:一定要是第一行,而且在前面没有任何对文件和项目的注释. 也就是说在Windows Ecl ...
- eclipse汉化安装
http://hi.baidu.com/rankabc/item/b07e03466550e4ce1381dac4 Eclipse汉化方法 网上搜了很多教程,步骤都不够详细,因此写一篇傻瓜版教程让新手 ...
- js 不可变的原始值和可变的对象引用
javascript中的原始值(undefined.null.布尔值.数字和字符串)与对象(包括数组和函数)有着根本区别.原始值是不可更改的:任何方法都无法更改(或“突变”)一个原始值.对数字和布尔值 ...
- yii学习随感
最近我们公司信易网络在用yii开发一个项目自己临时学习了一下yii 把学习感悟和大家一起分享一下 Yii Framework是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供 ...
- XStream简单使用01——xml和Ojbect互转
package org.zhb.test; /** * author : zhb * data : 2014-2-14 * use packages: * xmlpull-1.1.3.1.jar * ...
- Vim粘贴代码时缩进混乱
Vim粘贴代码时缩进混乱 via 背景 在终端Vim中粘贴代码时,发现插入的代码会有多余的缩进,而且会逐行累加.原因是终端把粘贴的文本存入键盘缓存(Keyboard Buffer)中,Vim则把这些内 ...