Seite 1 von 1

Kleines Problem -> Image aus ImageGadget

Verfasst: 26.10.2005 14:00
von Kukulkan
Hallo,

Ich steh grad auf'm Schlauch. :(

Wie kann ich ein, in einem ImageGadget angezeigtes, Bild wieder in ein Image verwandeln so dass ich mit StartDrawing() darauf was malen kann um es später zB wieder in einem anderen ImageGadget anzuzeigen?

Irgendwie klappt es nicht. Ein kurzer Tipp wie ich an das Image wieder drankomme?

Danke!

Volker

Verfasst: 26.10.2005 14:32
von benny
Hi Volker,

ich weiß nicht, ob ich Dich richtig verstanden habe. Aber IMHO zeigt ein Image-
gadget doch lediglich ein gewisses Image an. Soll heißen, daß Image, welches
angezeigt wird bleibt dasselbe.

Oder anders, Du weist dem Imagegadget ja ungefähr so ein Image zu:

Code: Alles auswählen

ImageGadget(0, 0, 0, 10, 10, UseImage(0))
Also dem vorher geladenden / gezeichnetem Image mit der ID = UseImage(0).

Wenn Du darauf wieder Zeichenoperationen ausführen möchtest, machst
Du das ganz normal so, wieder:

Code: Alles auswählen

UseImage(0)
StartDrawing(ImageOutput())
 ...
StopDrawing()
Um das veränderte Image dann wieder im ImageGadget zu erhalten:

Code: Alles auswählen

 SetGadgetState(0, UseImage(0))

Verfasst: 26.10.2005 14:41
von Kukulkan
Hallo benny,

Danke für deine Ausführung. Ich 'will' das originale Image aber garnicht wissen können. Ich möchte das so machen, dass ich meiner Routine lediglich ein ImageGadget (also dessen PureBasic-Gadget-ID) übergebe um dann in meiner Routine was draufzuzeichnen. Meine Routine muss also entweder:

- selbst rausfinden welches Image dem ImageGadget zugewiesen wurde
oder
- das Image aus dem ImageGadget wieder rekonstruieren in eine eigenes Image (CreateImage())

Es gibt zwar SetGadgetState() für ein ImageGadget aber leider kein GetGadgetState() :(

Das muss ich irgendwie lösen.

Eine Idee?

Volker

Verfasst: 26.10.2005 16:30
von benny
@Volker:

Achso ... jetzt versteh' ich :roll:

Vielleicht ist dann folgender Code für Dich von Nutzen:

Code: Alles auswählen

; German forum: http://robsite.de/php/pureboard/viewtopic.php?p=21346#21346
; Author: Andreas  (updated for PB3.92+ by Andre)
; Date: 02. November 2003

#DI_NORMAL = $3
; Saves the content of the displayed IMAGEGADGET in an .bmp file...
If OpenWindow(0,0,0,245,105,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"IMAGEGADGET") And CreateGadgetList(WindowID(0)) 
  ;Icon ins ImageGagdet 
  ImageGadget(0, 10,10,100,83,ExtractIcon_(0,"shell32.dll",1)) 
  
  ;oder Bitmap 
  ;IMAGEGADGET(0, 10,10,100,83,LoadImage(10,"C:\windows\setup.bmp")) 
  
  ;erstmal herausfinden ob Bitmap oder Icon 
  If SendMessage_(GadgetID(0),#STM_GETIMAGE,#IMAGE_BITMAP,0) 
    MessageRequester("Image","Bitmap",0) 
    ;BITMAP Speichern als Bitmap 
    Handle = SendMessage_(GadgetID(0),#STM_GETIMAGE,#IMAGE_BITMAP,0) 
    GetClientRect_(GadgetID(0),r.RECT) 
    SDC = CreateCompatibleDC_(0) 
    SelectObject_(SDC,Handle) 
    CreateImage(1,r\right,r\bottom) 
    hdc=StartDrawing(ImageOutput()) 
    BitBlt_(hdc,0,0,r\right,r\bottom,SDC,0,0,#SRCCOPY) 
    StopDrawing() 
    Name$ = SaveFileRequester("Speichern","unbenannt.bmp","*.bmp",0) 
    If Name$ 
      SaveImage(1,Name$,#PB_ImagePlugin_BMP);Pfad anpassen 
    EndIf 
    FreeImage(1) 
    DeleteDC_(SDC) 
    
  ElseIf SendMessage_(GadgetID(0),#STM_GETIMAGE,#IMAGE_ICON,0) 
    MessageRequester("Image","Icon",0) 
    ;ICON Speichern als Bitmap 
    Handle = SendMessage_(GadgetID(0),#STM_GETIMAGE,#IMAGE_ICON,0) 
    GetClientRect_(GadgetID(0),r.RECT) 
    CreateImage(1,r\right,r\bottom) 
    hdc=StartDrawing(ImageOutput()) 
    DrawIconEx_(hdc,0,0,Handle,r\right,r\bottom,0,0,#DI_NORMAL) 
    StopDrawing() 
    Name$ = SaveFileRequester("Speichern","unbenannt.bmp","*.bmp",0) 
    If Name$ 
      SaveImage(1,Name$,#PB_ImagePlugin_BMP);Pfad anpassen 
    EndIf 
    FreeImage(1) 
    
    
  EndIf 
  Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow 
EndIf  

Verfasst: 26.10.2005 16:40
von Kukulkan
Hallo benny,

Ja danke! Damit hat's geklappt!

Volker