EmptySpace Posted July 21, 2012 Share Posted July 21, 2012 (edited) I think here I need to put loop/arrays but im not so experienced in this. Func works very good with two images but I need to compare 10 images. Always is one main image and need to find same image as main. So if func returns false, loop to other image. expandcollapse popup#include _GDIPlus_Startup() $mainimage = "C:Documents and SettingsMyDesktopAutoitnewSukarpyti skaiciaic0.bmp" ;main image, this img wont change $fname1 = "C:Documents and SettingsvDesktopAutoitnewpicturesc1.bmp" ;=========experimenting $fname2 = "C:Documents and SettingsMyDesktopAutoitnewpicturesc2.bmp" $fname3 = "C:Documents and SettingsMyDesktopAutoitnewspicturesc3.bmp" $fname4 = "C:Documents and SettingsMyDesktopAutoitnewpicturesc4.bmp" $fname5 = "C:Documents and SettingsMyDesktopAutoitnewpicturesc5.bmp" $fname6 = "C:Documents and SettingsvDesktopAutoitnewpicturesc6.bmp" ;I think all these need to put into $fname7 = "C:Documents and SettingsMyDesktopAutoitnewpicturesc7.bmp" ; array and make loop $fname8 = "C:Documents and SettingsMyDesktopAutoitnewapicturesc8.bmp" $fname9 = "C:Documents and SettingsvDesktopAutoitnewpicturesc9.bmp" $fname10 = "C:Documents and SettingsMyDesktopAutoitnewpicturesc10.bmp" ;=========experimenting $bm1 = _GDIPlus_ImageLoadFromFile($mainimage) ; dont changes (main img) ;find for same img $bm2 = _GDIPlus_ImageLoadFromFile($fname2) MsgBox(0, "bm1==bm2", CompareBitmaps($bm1, $bm2)) ;shows if true or false, if it returns false then need to make to go for another img. _GDIPlus_ImageDispose($bm1) _GDIPlus_ImageDispose($bm2) _GDIPlus_Shutdown() Func CompareBitmaps($bm1, $bm2) $Bm1W = _GDIPlus_ImageGetWidth($bm1) $Bm1H = _GDIPlus_ImageGetHeight($bm1) $BitmapData1 = _GDIPlus_BitmapLockBits($bm1, 0, 0, $Bm1W, $Bm1H, $GDIP_ILMREAD, $GDIP_PXF32RGB) $Stride = DllStructGetData($BitmapData1, "Stride") $Scan0 = DllStructGetData($BitmapData1, "Scan0") $ptr1 = $Scan0 $size1 = ($Bm1H - 1) * $Stride + ($Bm1W - 1) * 4 $Bm2W = _GDIPlus_ImageGetWidth($bm2) $Bm2H = _GDIPlus_ImageGetHeight($bm2) $BitmapData2 = _GDIPlus_BitmapLockBits($bm2, 0, 0, $Bm2W, $Bm2H, $GDIP_ILMREAD, $GDIP_PXF32RGB) $Stride = DllStructGetData($BitmapData2, "Stride") $Scan0 = DllStructGetData($BitmapData2, "Scan0") $ptr2 = $Scan0 $size2 = ($Bm2H - 1) * $Stride + ($Bm2W - 1) * 4 $smallest = $size1 If $size2 < $smallest Then $smallest = $size2 $call = DllCall("msvcrt.dll", "int:cdecl", "memcmp", "ptr", $ptr1, "ptr", $ptr2, "int", $smallest) _GDIPlus_BitmapUnlockBits($bm1, $BitmapData1) _GDIPlus_BitmapUnlockBits($bm2, $BitmapData2) Return ($call[0]=0) EndFunc Tried to do very simple, like If it returns false then declare other variable or smth like that. But how to read return value? ;==================================== Edited July 21, 2012 by EdgarT Link to comment Share on other sites More sharing options...
EmptySpace Posted July 21, 2012 Author Share Posted July 21, 2012 (edited) I can see if its true or not with these iF CompareBitmaps($bm1, $bm2) = False then msgbox(0,"","lol false") iF CompareBitmaps($bm1, $bm2) = True then msgbox(0,"","lol true") But how to make to loop throught images? In primitive way it could be While 1 ;find for smae img $bm2 = _GDIPlus_ImageLoadFromFile($fname1) iF CompareBitmaps($bm1, $bm2) = False then msgbox(0,"","1st one false") $bm2 = _GDIPlus_ImageLoadFromFile($fname10) CompareBitmaps($bm1, $bm2) If CompareBitmaps($bm1, $bm2) = true then MsgBox(0, "bm1==bm2", CompareBitmaps($bm1, $bm2)) Endif ;MsgBox(0, "bm1==bm2", CompareBitmaps($bm1, $bm2)) _GDIPlus_ImageDispose($bm1) _GDIPlus_ImageDispose($bm2) WEnd And I could write this crap in over 50 lines lol Edited July 21, 2012 by EdgarT Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now