Kleines Problem -> Image aus ImageGadget

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Kleines Problem -> Image aus ImageGadget

Beitrag 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
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag 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))
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Beitrag 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
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag 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  
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Beitrag von Kukulkan »

Hallo benny,

Ja danke! Damit hat's geklappt!

Volker
Antworten