Einzelne PIXEL ändern

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PIC18F2550
Beiträge: 104
Registriert: 29.04.2024 09:10
Computerausstattung: Server HP Proliant G7
PC AMD FX(tm)-9590, 64Gb Ram, 2x 2TB Raid5 SAS

Einzelne PIXEL ändern

Beitrag 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.
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
Olafmagne
Beiträge: 140
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Einzelne PIXEL ändern

Beitrag 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
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Linux Zorin
PureBasic 6.xx
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Einzelne PIXEL ändern

Beitrag von STARGÅTE »

Du kannst das CanvasGadget nutzen.
Hier kannst du die Pixel manipulieren, und es wird sofort im Gadget angezeigt.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
PIC18F2550
Beiträge: 104
Registriert: 29.04.2024 09:10
Computerausstattung: Server HP Proliant G7
PC AMD FX(tm)-9590, 64Gb Ram, 2x 2TB Raid5 SAS

Re: Einzelne PIXEL ändern

Beitrag von PIC18F2550 »

Ok werd ich morgen mal Probieren.
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
mk-soft
Beiträge: 3852
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Einzelne PIXEL ändern

Beitrag 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()
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten