GDI image finder

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
RocketRider
Beiträge: 109
Registriert: 10.12.2004 19:27
Kontaktdaten:

GDI image finder

Beitrag von RocketRider »

Sucht das System nach allen vorhandenen GDI Bildern ab und zeigt sie in einer liste an.
Die Bilder können außerdem als bitmap abgespeichert werden.

Code: Alles auswählen

;GDI image finder
;================
; This source is released under zlib-licence

OpenWindow(1,0,0,800,600,"GDI image finder")

StopButton = ButtonGadget(#PB_Any,0,0,100,20,"Stop")
InputGadget = StringGadget(#PB_Any,200,0,100,20,"")
SaveButton = ButtonGadget(#PB_Any,300,0,100,20,"Save")

TABPOS = 1
PanelGadget(0, 0, 20, 800, 580)
  
  
  AddGadgetItem (0, -1, "Img"+Str(TABPOS))
  InnerWidth = GetGadgetAttribute(0, #PB_Panel_ItemWidth)
  InnerHeight = GetGadgetAttribute(0, #PB_Panel_ItemHeight)
  ImgWidth = InnerWidth
  ImgHeight = 1
  
  ScrollAreaGadget(TABPOS, 0, 0, InnerWidth, InnerHeight, ImgWidth, 800, 10)
    
    Repeat

      
      If hBmp < $7FFFFFFF
        hBmp + 1
        If GetObjectType_(hBmp) = #OBJ_BITMAP
          Found + 1
          bmp.BITMAP
          GetObject_(hBmp,SizeOf(BITMAP), bmp)
          
          ImageGadget(#PB_Any, 0, ImgHeight, bmp\bmWidth, bmp\bmHeight, hBmp)
          TextGadget(#PB_Any , bmp\bmWidth + 16, ImgHeight, 200, 16, Str(hBmp))
          
          If bmp\bmWidth + 16 + 200 > ImgWidth
            ImgWidth = bmp\bmWidth + 16 + 200
            SetGadgetAttribute(TABPOS, #PB_ScrollArea_InnerWidth, ImgWidth)
          EndIf
          
          ImgHeight + bmp\bmHeight + 16
          SetGadgetAttribute(TABPOS, #PB_ScrollArea_InnerHeight, ImgHeight)
        EndIf
        
        If ImgHeight => 32000
          TABPOS + 1
          ImgHeight = 1
          AddGadgetItem (0, -1, "Img"+Str(TABPOS))
          ScrollAreaGadget(TABPOS, 0, 0, InnerWidth, InnerHeight, ImgWidth, 800, 10)
          EndIf
          
          Count + 1
        Else
          Count = 0
        EndIf
        
        
        If Count % 10000 = 0 Or hBmp >= $7FFFFFFF
          Repeat
            If hBmp < $7FFFFFFF
              SetWindowTitle(1, "GDI image finder " + Str(hBmp) + "/" +Str($7FFFFFFF) + "  Found:" + Str(Found))
            EndIf
            Event = WindowEvent()
            If Event = #PB_Event_CloseWindow :Quit = #True:EndIf
            
            If Event = #PB_Event_Gadget
              If EventGadget() = StopButton:hBmp = $7FFFFFFF:EndIf
              
              If EventGadget() = SaveButton
                Bitmap = Val(GetGadgetText(InputGadget))
                
                If GetObjectType_(Bitmap) = #OBJ_BITMAP
                  bmp.BITMAP
                  GetObject_(Bitmap,SizeOf(BITMAP), bmp)
                  CreateImage(1,bmp\bmWidth,bmp\bmHeight, 32)
                  StartDrawing(ImageOutput(1))
                    DrawImage(Bitmap,0,0)
                  StopDrawing()
                  File$ = SaveFileRequester("Save as Bitmap","noname.bmp", "Bitmap(*.bmp)|*.bmp", 0)
                  If SaveImage(1, File$) =0
                    MessageRequester("ERROR","Can't save image!")
                  EndIf
                  
                Else
                  MessageRequester("ERROR","No valid BitmapID!")
                EndIf
                
                
                
              EndIf
              
            EndIf
            
            
          Until Event = 0
        EndIf
        
        
      Until Quit

Full-Package
GreenForce-Player - Der alternative Media Player!
Wie viele Tage sind es von Halloween bis Weihnachten?
Okt 31 - Dez 25 = 0 Tage!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

> Sucht das System nach allen vorhandenen GDI Bildern ab
Was heißt das? Will ja nicht wochenlang warten bis er meine TB durch hat :lol:

Variablendeklaration wäre schon wünschenswert (erforderlich) in diesem
Forum.

Desweiteren vermisse ich jegliche Erklärung was da nun wie passiert,
verstehe garnicht wo durch die Bilder iteriert wird? Wo im Code und wo im
Sytem?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
RocketRider
Beiträge: 109
Registriert: 10.12.2004 19:27
Kontaktdaten:

Beitrag von RocketRider »

Der Code sucht alle Bitmaps die sich im Arbeitspeicher befinden.
Eine komplette Durchsuchung(2 Mrd. Einträge) dauert ca. 10 min. (Rechnerabhänig).
Die Ergebnisse können auch schon während der Durchsuchung angeschaut werden.
GreenForce-Player - Der alternative Media Player!
Wie viele Tage sind es von Halloween bis Weihnachten?
Okt 31 - Dez 25 = 0 Tage!
Benutzeravatar
kswb73
Beiträge: 319
Registriert: 04.02.2008 16:51
Kontaktdaten:

Beitrag von kswb73 »

Lol,
Ich find's lustig. Die Images anderer Programme zu betrachten und zu speichern (einschließlich Windows). Man findet aber auch ganz andere nette Sachen heraus. Zum Beispiel das Windows geklipte Images für z.B. den Beenden Kopf beim herunterfahren nutzt (Windows XP).

Das Programm sollte aber auch beim Scrollen weiter suchen können. Scrollen mit dem Mausrad wäre nett. Beim Speichern sollte er außerdem .bmp automatisch dranhängen.

PS: Ist das ganze nicht eigenlich illegal, einfach so die Bilder anderer Programme zu "stehlen"?
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

Toll 10 Minunte System Durchsucht ( bei 90% CPU Auslastung ) ( 4*100³ Daten / Bildern etc. )

Hab mich schon gewundert das hier geschrieben wird das man schon beim suchen die Bilder anschauen kann, und dann stell ich am ende fest das es bei mir nicht geht, es wird am ende nichts angezeigt.

// Vista
Benutzeravatar
dige
Beiträge: 1241
Registriert: 08.09.2004 08:53

Beitrag von dige »

funzt prima ... auch die Umsetzung mit dem ScrollAreaGadget ist gut gemacht!
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Bisonte
Beiträge: 2470
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Nur schade das der Suchlauf stoppt, wenn man während des durchsuchens ein Image speichert.

@kswb73: Scrollen mit Mausrad funktioniert bei mir... allerdings nicht im ersten Tab.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten