|
发表于 2017-2-11 01:32:57
|
显示全部楼层
自己写了个函数,请高手指点改良
//找图函数
findPicture=function(x1,y1,w,h,imgFile,hwnd){
import gdip;
import gdip.bitmap;
//欲找的图
var bmpFind= gdip.bitmap(imgFile)
hFind=bmpFind.height
wFind=bmpFind.width
var findData= bmpFind.lockMemory(,0x21808/*_PixelFormat24bppRGB*/,1/*_ImageLockModeRead*/)
//====================================================================
var wSnape = w//截图宽度
var hSnape = h//截图高度
var snape=snapeTobmp(hwnd,x1,y1,w,h)
snapeData=snape.lockMemory(,0x21808/*_PixelFormat24bppRGB*/,1/*_ImageLockModeRead*/)
//扫描范围
var wScan=w-wFind+1
var hScan=h-hFind+1
var scanSnape=snapeData.Scan0
var scanFind=findData.Scan0
var strideFind=findData.Stride
var strideSnape=snapeData.Stride
var isFind = false;
var pf,ps
for(sh=1;hScan;1){
for(sw=1;wScan;1){
for(fh=1;hFind;1){
for(fw=1;wFind;1){
pf=fw*3+strideFind*(fh-1)
ps=(fw+sw)*3+strideSnape*(fh+sh-1)
if(scanFind[pf]==scanSnape[ps] && scanFind[pf-1]==scanSnape[ps-1] && scanFind[pf-2]==scanSnape[ps-2]){
isFind=true
}else {
isFind = false;
break;
}
}
if (isFind == false) { break; }
}
if (isFind) {
bmpFind.unlockMemory(snapeData)
bmpFind.unlockMemory(findData)
bmpFind.dispose()
snape.dispose()
return sw,sh;
}
}
}
bmpFind.unlockMemory(snapeData)
bmpFind.unlockMemory(findData)
bmpFind.dispose()
snape.dispose()
return -1,-1;
}
//截图函数
snapeTobmp = function(hwnd,x=0,y=0,w=1280,h=800) {
import gdip.bitmap
if( hwnd===null ) hwnd = ..win.getDesktop();
if( ..win.isIconic(hwnd) || ( !..win.isVisible(hwnd) ) )
..win.show(hwnd, 0x4/*_SW_SHOWNOACTIVATE*/);
var bmp;
..gdi.windowBuffer( hwnd,
function( hdc,hMemDc,hMemBitmap,width,height ){
::PrintWindow( hwnd,hMemDc,0)
if( x : y : w : h ){
var left,top,width,height = ..win.getClientPos(hwnd);
x = x + left;
y = y + top;
width = w:( width - x)
height = h:( height - y)
..gdi.doubleBuffer( hMemDc,width,height,
function( hdc,hMemDc,hMemBitmap ){
::BitBlt( hMemDc , 0, 0,width,height, hdc, x, y,0xCC0020/*_SRCCOPY*/ | 0x40000000/*_CAPTUREBLT*/)
bmp = gdip.bitmap(hMemBitmap);
return true;
}
)
}
else {
bmp = gdip.bitmap(hMemBitmap);
return true;
}
}
)
return bmp;
} |
|