Bild vergleichen!
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- KeyKon
- Beiträge: 1412
- Registriert: 10.09.2004 20:51
- Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit) - Wohnort: Ansbach
- Kontaktdaten:
Ich hab inzwischen verstanden was er will, hab jetz aber auch keinen Lösungsansatz parat...
Ich versuchs nochmal zu erklären:
Er hat ein kleines Bild von einem Button (Nehm ich ma an)
Nun macht er einen Screenshot und jetz soll ermittelt werden auf welchen Koordinaten dieses Bild von dem Button ist (um dort einen Mausklick zu simulieren nehm ich an)
Ich versuchs nochmal zu erklären:
Er hat ein kleines Bild von einem Button (Nehm ich ma an)
Nun macht er einen Screenshot und jetz soll ermittelt werden auf welchen Koordinaten dieses Bild von dem Button ist (um dort einen Mausklick zu simulieren nehm ich an)
(\/) (°,,,°) (\/)
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- KeyKon
- Beiträge: 1412
- Registriert: 10.09.2004 20:51
- Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit) - Wohnort: Ansbach
- Kontaktdaten:
Hier ein kleines Beispiel inkl Performancevergleich...
Bei mir braucht Point() ca 15 mal so lange wie der direkte Zugriff...
Code: Alles auswählen
CreateImage(0,1280,1024)
Procedure CopyImageToMem(Img.l, *mem)
Protected bmi.BITMAPINFO
Protected w.l, h.l, hBmp.l, hDC.l
w = ImageWidth(Img)
h = ImageHeight(Img)
hBmp = ImageID(Img)
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiHeader\biWidth = w
bmi\bmiHeader\biHeight = h
bmi\bmiHeader\biPlanes = 1
bmi\bmiHeader\biBitCount = 32
bmi\bmiHeader\biCompression = #BI_RGB
hDC = StartDrawing(ImageOutput(Img))
If GetDIBits_(hDC, hBmp, 0, h, *mem, bmi, #DIB_RGB_COLORS)
StopDrawing()
ProcedureReturn #True
Else
OpenConsole()
StopDrawing()
ProcedureReturn #False
EndIf
EndProcedure
time = ElapsedMilliseconds()
wi = ImageWidth(0)
hi = ImageHeight(0)
*buffer = AllocateMemory(wi*hi*4)
Debug CopyImageToMem(0,*buffer)
*pos.LONG = *buffer
For y = 0 To hi-1
For x = 0 To wi-1
bgr = *pos\l
red = Blue(bgr)
green = Green(bgr)
blue = Red(bgr)
*pos + 4
Next
Next
Debug StrF((ElapsedMilliseconds()-time)/1000,3)
time = ElapsedMilliseconds()
StartDrawing(ImageOutput(0))
For y = 0 To hi
For x = 0 To wi
rgb = Point(x,y)
red = Red(rgb)
green = Green(rgb)
blue = Blue(rgb)
Next
Next
StopDrawing()
Debug StrF((ElapsedMilliseconds()-time)/1000,3)
(\/) (°,,,°) (\/)
ich glaub nicht dass es funktionieren wird wenn ich mir das Bild ("C:/test.bmp") so ansehe
danke für hilfe im voraus
Edit:
Ich hab grad gesehen das mir die prozedure nicht den desktop ins bild legt, kann mir jemand in dieser hinsicht helfen?
Code: Alles auswählen
CreateImage(0,GetSystemMetrics_(#SM_CXSCREEN),GetSystemMetrics_(#SM_CYSCREEN))
Procedure CopyImageToMem(Img.l, *mem)
Protected bmi.BITMAPINFO
Protected w.l, h.l, hBmp.l, hDC.l
w = ImageWidth(Img)
h = ImageHeight(Img)
hBmp = ImageID(Img)
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiHeader\biWidth = w
bmi\bmiHeader\biHeight = h
bmi\bmiHeader\biPlanes = 1
bmi\bmiHeader\biBitCount = 32
bmi\bmiHeader\biCompression = #BI_RGB
hDC = StartDrawing(ImageOutput(Img))
If GetDIBits_(hDC, hBmp, 0, h, *mem, bmi, #DIB_RGB_COLORS)
StopDrawing()
ProcedureReturn #True
Else
OpenConsole()
StopDrawing()
ProcedureReturn #False
EndIf
EndProcedure
time = ElapsedMilliseconds()
wi = ImageWidth(0)
hi = ImageHeight(0)
*buffer = AllocateMemory(wi*hi*4)
Debug CopyImageToMem(0,*buffer)
SaveImage(0,"C:/test.bmp")
*pos.LONG = *buffer
For y = 0 To hi-1
For x = 0 To wi-1
bgr = *pos\l
red = Blue(bgr)
green = Green(bgr)
blue = Red(bgr)
*pos + 4
Next
Next
Debug Str((ElapsedMilliseconds()-time))
time = ElapsedMilliseconds()
StartDrawing(ImageOutput(0))
For y = 0 To hi
For x = 0 To wi
rgb = Point(x,y)
red = Red(rgb)
green = Green(rgb)
blue = Blue(rgb)
Next
Next
StopDrawing()
Debug Str((ElapsedMilliseconds()-time))
Edit:
Ich hab grad gesehen das mir die prozedure nicht den desktop ins bild legt, kann mir jemand in dieser hinsicht helfen?
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22