博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两副图片的差异比较的C#实现
阅读量:6989 次
发布时间:2019-06-27

本文共 846 字,大约阅读时间需要 2 分钟。

早上看到 写的《》文章,想起自己以前写过的一个《大家来找茬》的游戏辅助工具(就是作弊器了,嘿嘿),当时也是用到了判断比较两副图片的差异功能。现将当时写的差异比较代码发上来,给大家参考参考。

当时用的简单实现方法就是:将两副图片同时按一定大小的小块“切分开”,再分别比较这些小块,如果某个块里出现有一个不同的象素点,那就认为此块所在的位置是有差异的否则认为是相同的,当比较完所有小块后,两副图之间的不同之处的位置也就出来了。因为要进行所有小块比较,所以最坏的情况下是要扫描比较图片的所有象素点(两副图完全一样的情况时),最理想的情况就是只扫描比较所有小块的第一点(两副图完全不一样的情况时)。

这种方法的判断精确性是根据“块”大小来决定的,也就是如果你将“块”设得过大,判断的“精确性”就越低(因为只要块里有一点不相同,就认为此块位置是有差异的),如将“块”设置得过小,则判断的“精确性”就越高,但需要时间也有可能会越多!

 

如有下面的两副图:(以下图借用了 的《》文章里的截图,呵)

                             

            (第一幅图片)                                                               (第二幅图片)

 

将上面两幅图按20*20(px)大小“切分”:

 

                     

            (第一幅图片)                                                               (第二幅图片)

 

两副图都分别“切分”成多个20*20的小块,程序再分别对这些小块进行判断,如果“扫描”到小块里的某个象素点是不相同的则记录此块的坐标位置并退出当前块的扫描,继续扫描下一个小块,直到所有小块“扫描”完成。

在程序处理时为提高速度,利用了Bitmap的LockBits方法,直接对图片的内存数据操作,并且“切分”图片的小块时,并不真正的“切图”,而是利用“内存指针”进行数据定位操作。如下面代码:

 

代码

 

 

 

示例项目代码下载:

上面两幅图的差异比较后的截图:(两图中蓝色与红色框框内的小块就是表明有差异的小块)

 本文转自Kingthy博客园博客,原文链接:http://www.cnblogs.com/kingthy/archive/2009/12/16/1625745.html,如需转载请自行联系原作者

你可能感兴趣的文章
领酌酒业:白酒行业真的那么暴利?
查看>>
拆掉城墙 苹果终于宣布要对外公布AI研究成果
查看>>
你不知道的SOAP webserivce 和 RESTful SOAP webserivce 对比及区别
查看>>
(十五)JAVA springboot ssm b2b2c多用户商城系统源码-commonservice-sso服务搭建(一)...
查看>>
Go第三方库
查看>>
java电子商务系统源码 Spring MVC+mybatis+spring cloud+spring boot+spring security
查看>>
android PopupWindow响应返回键
查看>>
Spring 3 MVC深入研究
查看>>
Linux 进程间通信 - 共享内存(转)
查看>>
文件共享系统之NFS
查看>>
数据库备份恢复(oracle)
查看>>
Exchange 2010迁移Exchange 2013(一)共存部署
查看>>
Zabbix常用key和自定义key的讲解
查看>>
robocopy 遷移共享文件夾
查看>>
adb
查看>>
SD9031: 各浏览器对 Range 接口的实现存在差异
查看>>
IE10中,文本框长度需要注意
查看>>
SSL与TLS的区别以及介绍
查看>>
Power point 2010 打开加速方法
查看>>
最近在研究 PLC机器 的 MODBUS RTU 通讯协议与C# 交互
查看>>