请问怎样比较图片是否相同啊(100分)

  • 主题发起人 主题发起人 goodman
  • 开始时间 开始时间
G

goodman

Unregistered / Unconfirmed
GUEST, unregistred user!
请问怎样比较两张图片是否相同啊
 
这是一个比较复杂的问题,
首先是比较格式BMp,JPEG,PCX,GIF等,
然后再是颜色数,大小尺寸,
再是点的比较了!
我决得有一个很简单的比较方法按照一定的规律在文件中或图片中采(5-9个)样点进行比较
如果相同则人为是相同的,
采样点的个数和采样的位置可根据图型的自身特征来决定!
 
用bitblt函数阿他的帮助里面有一个光栅操作,不过这是建立在大小相同的两幅图上的,
光栅操作中好像有个什么异或,将一幅图贴到另一副图上,如果完全相同这是黑色
 
首先是比较格式啦,这个不难,用Picture装入并比较Graphic的ClassName就可以了;
然后是比较大小,当然更简单了,比较Picture的Width和Height就行;
如果这两条都通过了,可以用以下的方法,如果都是Bitmap,则可以通Scanline来比较,很快;
如果不是,你可以创建两个内存流并将Graphic保存到内存流中并比较其中的每个字节.
 
图形易或
 
有一种算法:以二进制方式打开文件,把他们看成字符来比较,有一个字符不同就
知道了。
 
首先看个是否相同,若相同,对他进行扫描,就它的颜色值和灰度值,
若也相同就是相同的,当然要求其大小!灰度值和大小都有源码!若要可以给你!
 
最近我在做比较的内容,不知道哪位有代码可以参考一下啊
 
图像大不大,不大的话可以用这种方法,
function ComparePIC(oldpic,newpic:TBitmap):boolean;
var
bit1, bit2: TBitmap;
st1, st2: TStringStream;
begin
Result:=False;
st1 := tStringstream.create('');
st2 := tStringstream.create('');
Try
oldpic.savetostream(st1);
newpic.savetostream(st2);
Result:= Boolean(comparestr(st1.datastring, st2.datastring));
finally
st1.free;
st2.free;
end;
end;
我就用的这种方法,很好用的,速度也蛮快!
 
不知道楼主有没有找到什么好方法啊?
 
后退
顶部