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 ...
随机推荐
- jsp页面中frameset的使用方法
frame,是网页开发必须掌握的知识.例如后台架构.局部刷新,页面分割,都是frame的用途表现,尤其是后台页面制作,使用frame会给用户带来非常舒适的使用感受. frame知识点包括(frames ...
- Asp.net自制模板框架
最近在做个包含了大量重复样式的控件的网站. 如果用MVC的话,我可以针对每个需要单独块编辑的Model写一个局部视图. 然后根据不同逻辑需求拼起来.用现成MVC框架非常容易做到. 但环境是3.5的最高 ...
- zigbee
IEEE802.15.4定义了两种器件:全功能器件(FFD,Full-FunctionDevice),和简化功能器件(RFD,Reduced-functionDevice) 协调器:(coordina ...
- MD5/SHA加密
public class EncryptUtil { public static String getEncrypt(String value , String encrypt_type){ Stri ...
- iOS 设置图片imageView圆角——对图片进行裁剪
以前设置图片圆角总是把imageView设置成圆形,然后设置maskToBounds为YES,其实这样处理很消耗性能,图片多了之后比较卡,最好将图片进行裁剪后显示:这里有个分类可以用: UIImage ...
- WKWebView无法(通过URL schemes)跳转到其他App
Custom scheme URL 在WKWebView中默认是不支持的 (但Safari可以). 我们可以通过NSError来进行一些处理从而使得程序可以正常跳转: func webView(web ...
- 【培训】交换机VLAN
为了解决用交换机做LAN互联无法限制广播的问题,出现了VLAN技术,把一个LAN划分为多个逻辑的“LAN”-VLAN. VLAN技术将一个物理的LAN逻辑地划分为不同的广播域,每一个VLAN包含一组有 ...
- vim plugin 原理
vim 个性化设置与功能扩展均通过 script 来实现,这种 script 又叫 plugin.plugin 是 vim 的核心与精髓. 最常用的配置文件 vimrc,也是一种 plugin.换句话 ...
- mysql query insert中文乱码
mysql新建的表的charset都是utf8的. 在phpmyadmin里直接敲sql,中文可以insert进去的,但是在php代码里mysql_query同样的sql语句就是不行,保存到表里是乱码 ...
- web 中 bbs 例子(多次递归)
数据库设计:create table `header`( // 父表 parent int not null, //父级 poster varchar(20) not null, //作者 p ...