以前版本的C(TC时代)有graphics库可以用,
现在乱谨这个库不是通用的了(VC++不包含graphics.h),但是可以加上easyX(就是个常用非官方库,实现了graphics.h的功能并有不少改进).
给你个思路.
直观的方法:
1.用loadimage将两张图片加载
2.用putimage输出第一张闭贺
3.用putimage输出第二张, 但是第四个参数选择XOR_PUT(图像和原有像素作异或运算)
相同颜色的点将被抹除而只哗态基留下不同部分(但是颜色不能保证正确).
此方法可以快速直观得到不同处(找茬外挂专用)
准确的方法:
1.load两张图片
2.用getpixel逐个对比两张图片
稍稍优化的方法:
1.先用直观方法获得大致不同的区域
2.用GetMouseMsg()获得鼠标相关信息
3.鼠标框选差异区域
4.对应两个图片用getpixel仅处理差异区域.
要是用winapi之类的,那方法就更多了.
遍历像素,对比RGB的颜色差。C语言的话用GTK库,EGE。EasyX貌似要把文件名变成.cpp的。不是纯C语言。你用了easyX.h就知道了。
#include "graphics.h"float IsMatch(Iamge *a,Image *b )//传两个Image结构体指针进去
{
int same=0,sum//相同像素,总像素
int x,y,W=a->getwidth(),H=a->getheight()
putimage(0,0,a)//连着输出两张图片,方法很多,其他再说。
putimage(W,0,b)
for(x=1w<=Wx++)//比较输出的像素
{
for(y=1y<=Hy++)
{
凳册 sum++
局粗袜 if(getpixel(x,y,)==getpixel(x+W,y))//对比
桐激 same++
}
}
return same/sum//返回一个相似比
}
typedef struct tagRGBQUAD { BYTE rgbBlue// 蓝色袭梁的亮度(值范围为0-255) BYTE rgbGreen// 绿色的亮度(值范围为0-255) BYTE rgbRed// 红色的亮度(值范围为0-255) BYTE rgbReserved// 保留,必须为0 } RGBQUAD 颜色表中RGBQUAD结构数据的个数有biBitCount来确定: 当biBitCount=1,4,8时,分别有2,16,256个表项 当biBitCount=24时,没有颜色表项。 位图信息头和颜色表组成位棚友图信息,BITMAPINFO结构定义如下: typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader// 位图信息头链禅槐 RGBQUAD bmiColors[1]// 颜色表 } BITMAPINFO欢迎分享,转载请注明来源:内存溢出
评论列表(0条)