Box auf jpg-Bild zeichnen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Panik
Beiträge: 9
Registriert: 21.03.2007 20:18

Box auf jpg-Bild zeichnen

Beitrag von Panik »

Hallo !

Habe folgenden Code , bei dem es mir nicht gelingt einen Rahmen auf das Bild zu zeichnen.
Erst wenn ich mal andere Fenster von anderen Anwendungen zeitweise aktiviere und dann das compilierte Programm, sehe ich , das meine Linien zwar gezeichnet wurden , aber eine Ebene tiefer liegen.Ich kann sie während/nachdem ich sie male nicht sehen.

Code: Alles auswählen

Enumeration
  #window_0
  #imagegadget
EndEnumeration

Procedure GetMouseX(Gadget) 
  GetCursorPos_(mouse.POINT) 
  MapWindowPoints_(0,GadgetID(Gadget),mouse,1) 
  ProcedureReturn mouse\x 
EndProcedure 
Procedure GetMouseY(Gadget)    
  GetCursorPos_(mouse.POINT) 
  MapWindowPoints_(0,GadgetID(Gadget),mouse,1) 
  ProcedureReturn mouse\y 
EndProcedure 

If OpenWindow(#window_0,0,0,710,540,"Aufnahmen",  #PB_Window_SystemMenu | #PB_Window_TitleBar |#PB_Window_ScreenCentered )
  CreateGadgetList(WindowID(#window_0)) 
  TextGadget(11,  10,0,100,20,"MouseClick X: 0") 
  TextGadget(12,10,0,100,20,"MouseClick Y: 0") 
EndIf

file$ = "C:\Dokumente und Einstellungen\Patrick\Eigene Dateien\UW_Fuji1\Bild_0001.jpg"

UseJPEGImageDecoder()
LoadImage(1, file$)
If ImageHeight(1)>ImageWidth(1)  
  ImageGadget(#imagegadget, 377, 145,240,320,  ResizeImage(1,240,320))
Else
  ImageGadget(#imagegadget, 377, 145,320,240, ResizeImage(1,320,240))
EndIf 

posx = 5
posy = 5

Repeat
  SmartWindowRefresh(#window_0,1)
  Select WaitWindowEvent()     
    Case #PB_Event_CloseWindow:End 
    Case 13100 ;#WM_LBUTTONDOWN 
      SetGadgetText(11,"MouseClick X: "+Str( GetMouseX(#imagegadget))) 
      SetGadgetText(12,"MouseClick Y: "+Str( GetMouseY(#imagegadget)))     
      StartDrawing(ImageOutput(1))
    
      Box( posx , posy, GetMouseX(#imagegadget) - posx , GetMouseY(#imagegadget) - posy , $FF0000)            
      Box(GetMouseX(#imagegadget) -1 , GetMouseY(#imagegadget) -8 ,    2 , 16) 
      Box(GetMouseX(#imagegadget) - 8, GetMouseY(#imagegadget) - 1  , 16, 2  ) 
      StopDrawing()  
  EndSelect 
ForEver 

Purebasic 4.02 und jaPBe V3
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> aber eine Ebene tiefer liegen.
das ist unsinn.

du musst das gadget nach dem zeichnen refreshen, direkt nach dem stopdrawing, innerhalb der bedingung.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
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 »

Füg mal hinter StopDrawing folgendes ein:

Code: Alles auswählen

SetGadgetState(#imagegadget, ImageID(1))

:wink:

edit
rechtschreib korrigiert
Zuletzt geändert von ts-soft am 14.04.2007 18:46, insgesamt 1-mal geändert.
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich war jetzt unsicher, ob die ID sich auch ändert bei resize,
weil er ja in der ersten zuweisung nicht direkt die ID drin hat, sondern ResizeImage()...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Panik
Beiträge: 9
Registriert: 21.03.2007 20:18

Beitrag von Panik »

Danke ! Das hat geklappt mit dem Refresh des Gadgets ...
Purebasic 4.02 und jaPBe V3
Antworten