VFP 图像比较!
以下代码是 dkfdtf 老师的截图程序:
DECLARE INTEGER FindWindow IN user32;
STRING lpClassName,;
STRING lpWindowName
DECLARE INTEGER GetDC IN user32 INTEGER hwnd
Declare SHORT GetWindowRect IN user32 INTEGER hwnd, STRING @ lpRect
DECLARE Long GetWindowDC IN WIN32API ;
Long hWnd
DECLARE Long ReleaseDC IN WIN32API ;
Long hWnd, Long hDc
DECLARE Long CreateCompatibleDC IN WIN32API ;
Long hDc
DECLARE Long DeleteDC IN WIN32API ;
Long hDc
DECLARE Long CreateCompatibleBitmap IN WIN32API ;
Long hDc, Long nWidth, Long nHeight
DECLARE Long BitBlt IN WIN32API ;
Long hDestDC, ;
Long nXDest, Long nYDest, Long nWidth, Long nHeight, ;
Long hSrcDC, ;
Long nXSrc, Long nYSrc, ;
Long dwRop
DECLARE Long SelectObject IN WIN32API ;
Long hDc, Long hObject
DECLARE Long DeleteObject IN WIN32API ;
Long hObject
DECLARE Long GdiplusStartup IN gdiplus ;
Long @ token, String @ inputbuf, Long @ outputbuf
DECLARE Long GdiplusShutdown IN gdiplus ;
Long token
DECLARE Long GdipCreateBitmapFromHBITMAP IN gdiplus ;
Long hbitmap, Long hpalette, Long @ hGpBitmap
DECLARE Long GdipDisposeImage IN gdiplus ;
Long image
DECLARE Long GdipSaveImageToFile IN gdiplus ;
Long nImage, String FileName, ;
String clsIdEncoder, Long encoderParams
#define SRCCOPY 0x00CC0020
LOCAL cFileExtName, cEncoder, iInputBuf, iResult
LOCAL hDesktopDc, hVDc, hBitmap, hToken, hGdipBitmap
m.hWnd=FindWindow("Notepad",NULL) &&截取一个文本窗口试一试
tcFile=LOWER('I:\TUT.JPG') &&jpg 格式图像
m.cFileExtName =LOWER( JUSTEXT( m.tcFile ))
lpRect = REPLI (Chr(0), 16)
GetWindowRect (m.hWnd, @lpRect)
lnWidth=ctob(SUBS(lpRect,9,4),'4rs')-ctob(SUBS(lpRect,1,4),'4rs')&&窗口宽度
lnHeight=ctob(SUBS(lpRect,13,4),'4rs')-ctob(SUBS(lpRect,5,4),'4rs')&&窗口高度
m.hDesktopDc = GetDC( m.hWnd )
m.hVdc = CreateCompatibleDC( m.hDesktopDc )
m.hBitmap = CreateCompatibleBitmap( m.hDesktopDc,10,10 )
SelectObject( m.hVdc, m.hBitmap )
*BitBlt( m.hVdc, 0,0,10,10, m.hDesktopDc,283,563, SRCCOPY )
m.hToken = 0
m.iInputBuf = 0h01 + REPLICATE( CHR(0),15 )
m.iResult = -1
IF ( 0 == GdiplusStartup( @ m.hToken, @ m.iInputBuf, 0 ))
m.hGdipBitmap = 0
IF ( 0 == GdipCreateBitmapFromHBITMAP( ;
m.hBitmap, 0, @ m.hGdipBitmap ))
m.cEncoder = ICASE( ;
'jpg' == m.cFileExtName, 0h01, ;
'gif' == m.cFileExtName, 0h02, ;
'tif' == m.cFileExtName, 0h05, ;
'png' == m.cFileExtName, 0h06, 0h00 ) ;
+ 0hF47C55041AD3119A730000F81EF32E
m.iResult = GdipSaveImageToFile( ;
m.hGdipBitmap, ;
STRCONV( m.tcFile+CHR(0), 5 ), ;
m.cEncoder, 0 )
GdipDisposeImage( m.hGdipBitmap )
ENDIF
GdiplusShutdown( m.hToken )
ENDIF
DeleteObject( m.hBitmap )
DeleteDC( m.hVdc )
ReleaseDC( 0, m.hDesktopDc )
这样就可以截图屏幕上的某一区域的图像!
现在是想用这个刚截取的图像和现有的图像进行比较是否相同,我的方法是用FILETOSTR() 把图像转化为字符串,然后作比较!
现在是截图后要保存图像,能不能不用保存图像,在内存中把图像转为FILETOSTR()那样的字符串,这样就可以省却保存图像这一步了!(或者其他方法也行),看看上面代码 在那里就可以进行了,我就看不懂!谢谢!