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")