Seite 1 von 1

Einzelne PIXEL ändern

Verfasst: 04.11.2024 12:54
von PIC18F2550
Hallo,

über die Funktionen CreateImage, StartDrawing, StopDrawing und ImageGadget kann ich zwar ein Bild erstellen muss aber bei jeder kleinen änderung das ganze Bild neu generieren.

Gibt es eine möglichkeit in dem angezeigzen Bild einzelne Pixel zu verändern ohne alles neu Aufbauen zu müssen?

Danke.

Re: Einzelne PIXEL ändern

Verfasst: 04.11.2024 13:08
von Olafmagne
PIC18F2550 hat geschrieben: 04.11.2024 12:54 Hallo,

über die Funktionen CreateImage, StartDrawing, StopDrawing und ImageGadget kann ich zwar ein Bild erstellen muss aber bei jeder kleinen änderung das ganze Bild neu generieren.

Gibt es eine möglichkeit in dem angezeigzen Bild einzelne Pixel zu verändern ohne alles neu Aufbauen zu müssen?

Danke.
Mit StartDrawing kannst Du doch auf dem Bild Zeichnen! (Imageoutput(#Image) )
D.h. Das Image wird Nicht neu aufgebaut sondern nur verändert.


Olaf

Re: Einzelne PIXEL ändern

Verfasst: 04.11.2024 13:40
von STARGÅTE
Du kannst das CanvasGadget nutzen.
Hier kannst du die Pixel manipulieren, und es wird sofort im Gadget angezeigt.

Re: Einzelne PIXEL ändern

Verfasst: 04.11.2024 19:09
von PIC18F2550
Ok werd ich morgen mal Probieren.

Re: Einzelne PIXEL ändern

Verfasst: 04.11.2024 20:52
von mk-soft
Beim ImageGadget musst du nach dem ändern das Image mit SetGadgetState aktualisieren

Kleine Spielerei ;)

Code: Alles auswählen

;-TOP

Procedure UpdateImageGadget(image)
  Protected color, x, y
  color = Random($FFFFFF, $404040)
  x = Random(280, 10)
  y = Random(180, 10)
  If StartDrawing(ImageOutput(image))
    Circle(x, y, 10, color)
    StopDrawing()
    SetGadgetState(0, ImageID(image))
  EndIf
EndProcedure

Procedure UpdateWindow()
  Protected dx, dy
  dx = WindowWidth(0)
  dy = WindowHeight(0) - StatusBarHeight(0) - MenuHeight()
  ; Resize Gadgets
EndProcedure

Procedure Main()
  Protected dx, dy
  
  #WinStyle = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
  
  If OpenWindow(0, #PB_Ignore, #PB_Ignore, 600, 400, "Test Window", #WinStyle)
    ; MenuBar
    CreateMenu(0, WindowID(0))
    MenuTitle("&File")
    MenuItem(99, "E&xit")
    
    ; StatusBar
    CreateStatusBar(0, WindowID(0))
    AddStatusBarField(#PB_Ignore)
    
    CreateImage(0, 300, 200, 24, #White)
    
    ; Gadgets
    dx = WindowWidth(0)
    dy = WindowHeight(0) - StatusBarHeight(0) - MenuHeight()
    ImageGadget(0, 10, 10, 300, 200, ImageID(0))
    
    ; Bind Events
    BindEvent(#PB_Event_SizeWindow, @UpdateWindow())
    
    AddWindowTimer(0, 1, 250)
    
    ; Main Loop
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Select EventWindow()
            Case 0
              Break
          EndSelect
          
        Case #PB_Event_Menu
          Select EventMenu()
            Case 99
              PostEvent(#PB_Event_CloseWindow, 0, 0)
              
          EndSelect
          
        Case #PB_Event_Gadget
          Select EventGadget()
              
          EndSelect
          
        Case #PB_Event_Timer
          Select EventTimer()
            Case 1
              UpdateImageGadget(0)
              
          EndSelect
          
      EndSelect
    ForEver
    
  EndIf
  
EndProcedure : Main()