Bild vergleichen!

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
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:

Beitrag 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...
(\/) (°,,,°) (\/)
Benutzeravatar
R4z0r1989
Beiträge: 521
Registriert: 12.06.2005 18:06
Kontaktdaten:

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