问题描述
我想识别一些图片上的一个按妞有一些图片上,他有一个确认按钮的,而且这个位置每次都不同的..我想随时取得它的xy的位置就可以了.看看要多少钱能做.请联系我.急....QQ4662599
解决方案
解决方案二:
按钮是否每次显示都一样?
解决方案三:
当初写了一个,不过是DelphifunctionFindBitmapPoint(//寻找子位图的位置mBitmapMain:TBitmap;//主位图mBitmapSub:TBitmap//子位图):TPoint;//返回子图像存在的坐标,如不存在则返回(-1,-1)//Zswang2006-08-04wjhu111#21cn.com转贴请别删除,尊重作者才能让其有兴趣公开文档const//pfDevice,pf1bit,pf4bit,pf8bit,pf15bit,pf16bit,pf24bit,pf32bit,pfCustomcBitsPerPixels:array[TPixelFormat]ofByte=(0,1,4,8,15,16,24,32,0);//像素格式所占用的字位数列表varI,J,K,L:Integer;//循环变量vStrMain:string;//主位图一行的像素数据字符串格式vStrSub:string;//子位图一行的像素数据字符串格式vLine:PChar;//临时ScanLine用vBytesSub:Integer;//子位图一行像素数据占用的字节数vBytesMain:Integer;//主位图一行像素数据占用的字节数vBitsPerPixels:Byte;//一个像素占用的字位数vFlag:Boolean;beginResult:=Point(-1,-1);///////Begin安全判断ifnotAssigned(mBitmapMain)ornotAssigned(mBitmapSub)thenExit;ifmBitmapMain.PixelFormat<>mBitmapSub.PixelFormatthenExit;if(mBitmapSub.Height<=0)or(mBitmapSub.Width<=0)or(mBitmapMain.Height<=0)or(mBitmapMain.Width<=0)thenExit;///////End安全判断vBitsPerPixels:=cBitsPerPixels[mBitmapMain.PixelFormat];ifvBitsPerPixels=0thenExit;vBytesSub:=(mBitmapSub.Width*vBitsPerPixels+7)div8;vBytesMain:=(mBitmapMain.Width*vBitsPerPixels+7)div8;if(vBytesSub=0)or(vBytesMain=0)thenExit;SetLength(vStrSub,vBytesSub);SetLength(vStrMain,vBytesMain);vLine:=mBitmapSub.ScanLine[0];Move(vLine^,vStrSub[1],vBytesSub);forI:=0tomBitmapMain.Height-1dobeginvLine:=mBitmapMain.ScanLine[I];Move(vLine^,vStrMain[1],vBytesMain);J:=Pos(vStrSub,vStrMain);//寻找子位图第一行是否存在主位图的一行中L:=J;whileJ>0dobeginvFlag:=True;forK:=1tomBitmapSub.Height-1dobeginifI+K>=mBitmapMain.Heightthen//边界判断beginvFlag:=False;Break;end;vLine:=mBitmapMain.ScanLine[I+K];Move(vLine^,vStrMain[1],vBytesMain);vLine:=mBitmapSub.ScanLine[K];Move(vLine^,vStrSub[1],vBytesSub);ifnotCompareMem(@vStrSub[1],@vStrMain[J],vBytesSub)then//判断子位图之后的行以相应主位图是否一致beginvLine:=mBitmapMain.ScanLine[I];Move(vLine^,vStrMain[1],vBytesMain);vLine:=mBitmapSub.ScanLine[0];Move(vLine^,vStrSub[1],vBytesSub);vFlag:=False;//不一致打上标记Break;end;end;ifvFlagthen//一致则返回beginResult:=Point((J-1)divvBitsPerPixels*8,I);//计算多少像素位置Break;end;J:=Pos(vStrSub,Copy(vStrMain,L+1,MaxInt));//考虑子位图第一行在主位图`后面还会出现的情况ifJ>0thenbeginJ:=L+J;L:=J;end;end;end;end;{FindBitmapPoint}