Seite 3 von 3
Verfasst: 25.01.2009 21:56
von KeyKon
@Kaeru: *hüstel*^^ War spät gestern (bzw. heute)...
R4z0r1989 hat geschrieben:Ich hab grad gesehen das mir die prozedure nicht den desktop ins bild legt, kann mir jemand in dieser hinsicht helfen?
Also das könntest du auch selber mal suchen (auf PureArea.net)
Da is im übrigen auch die Prozedur drin, die is aber nur dafür zuständig das Image so in den Speicher zu kopieren das man direkt drauf zugreifen kann...
Verfasst: 25.01.2009 22:43
von R4z0r1989
so ich schreib mal meinen code und frag mal ganz doof in den raum warum der code zwar läuft aber mir kein ergebnis bringt das er eig. soll ^^
Code: Alles auswählen
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
Global Mem.l
Mem = AllocateMemory(1024)
Procedure.l DesktopOutput()
PokeL(Mem, 1)
ProcedureReturn Mem
EndProcedure
CreateImage(0,GetSystemMetrics_(#SM_CXSCREEN),GetSystemMetrics_(#SM_CYSCREEN))
hDC = StartDrawing(ImageOutput(0))
BitBlt_(hDC,0,0,ImageWidth(0),ImageHeight(0),GetDC_(GetDesktopWindow_()),0,0,#SRCCOPY )
StopDrawing()
LoadImage(1,"data/save.bmp")
StartDrawing(ImageOutput(1))
Debug Hex(Point(0,15))
StopDrawing()
time = ElapsedMilliseconds()
wi0 = ImageWidth(0)
hi0 = ImageHeight(0)
wi1 = ImageWidth(1)
hi1 = ImageHeight(1)
*buffer0 = AllocateMemory(wi0*hi0*4)
*buffer1 = AllocateMemory(wi1*hi1*4)
CopyImageToMem(0,*buffer0)
CopyImageToMem(1,*buffer1)
*pos0.LONG = *buffer0
*pos1.LONG = *buffer1
bgr1 = *pos1\l
For y = 0 To hi0-1
For x = 0 To wi0-1
bgr0 = *pos0\l
If bgr0 = bgr1
*postemp0 = *pos0
*postemp1 = *pos1
found = 0
For y2 = 0 To hi1-1
For x2 = 0 To wi1-1
bgr0 = *pos0\l
bgr1 = *pos1\l
If bgr0 = bgr1
found+1
ElseIf bgr0 <> bgr1
Break 2
EndIf
*pos0 + 4
*pos1 + 4
Next x2
*pos0 = *postemp0 + (wi0 * y2)
Next y2
If found > 10
Debug found
If found = hi1 * wi1
Debug "saugut"
CreateImage(2,16,16)
StartDrawing(ImageOutput(2))
DrawImage(ImageID(0),x,y,16,16)
StopDrawing()
SaveImage(2,"C:/test2.bmp")
Break 2
EndIf
EndIf
*pos0 = *postemp0
*pos1 = *postemp1
EndIf
*pos0 + 4
Next
Next
Debug ""
Debug Str((ElapsedMilliseconds()-time))
Debug lol
;InvalidateRect_(0, 0, 0)
SaveImage(0,"C:/test.bmp")
SaveImage(1,"C:/test1.bmp")