Point, Plot, Array und Sprite

Anfängerfragen zum Programmieren mit PureBasic.
spider84
Beiträge: 76
Registriert: 05.03.2008 03:06

Point, Plot, Array und Sprite

Beitrag von spider84 »

Huhu - kann mir mal wer verraten warum das so nicht klappt?
Das Bild soll 1024x768 groß sein. Wollte Freundin damit Arrays näher bringen...

Code: Alles auswählen

Global x,y
Dim Bildschirm(1023,767)

InitSprite()
InitKeyboard()
OpenScreen(1024,768,16,"blub")

UseJPEGImageDecoder()

LoadSprite(0,"003.jpg")

DisplaySprite(0,0,0)

FlipBuffers()
ClearScreen(0)
StartDrawing(ScreenOutput())
For x=0 To 1023
  For y=0 To 767
    Bildschirm(x,y)=Blue(Point(x,y))
  Next y
Next x
Beep_(440,50)
Repeat
  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_All)

For x=0 To 1023
  For y=0 To 767
    Plot(x,y,Bildschirm(x,y))
  Next y
Next x
StopDrawing()
FlipBuffers()
Beep_(440,50)
Repeat
  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_All)
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Davon ab, das einiges an Deinem Code zu ändern ist, solltest vielleicht mal schreiben, was damit erreichen möchtest...
Eine Art Query-Planner soll die Ausführung von Map/Reduce-Funktionen in Hadoop stark beschleunigen.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

dein erstes flipbuffers ist unnütz, und vor der ersten warteschleife fehlt eins.

deine Point() schleife liest nix aus, weil du direkt vorher den screen löscht.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

du stellst das Bild erst da, und löschst aber danach den ganzen Screen

das heißt alle Points die du dann abfragst sind schwarz, also auch das Array, also auch das endbild was du plottest.

also ClearScreen() weg, oder das Drawing auf dem Sprite direkt (SpriteOutput) und nicht auf dem Screen lesen
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

und vor dem plotten solltest du dann vielleicht auch noch mal löschen...

und außerdem bringt das auch nich viel, weil wenn's klappt sieht man auch keinen unterschied.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Ich nehm mal an, Du willst sowas machen, ist aber extrem langsam...

Code: Alles auswählen

If InitSprite() And InitKeyboard() And OpenScreen(1024, 768, 32, "")
  Dim Bildschirm(1027, 767)
  
  UseJPEGImageDecoder()
  If LoadSprite(0, "003.jpg")
    StartDrawing(SpriteOutput(0))
      For x=0 To 1023
        For y=0 To 767
          Bildschirm(x, y) = Blue(Point(x, y))
        Next y
      Next x
    StopDrawing()
  EndIf
    
  Repeat
    ExamineKeyboard()
    
    ClearScreen(0)
      StartDrawing(ScreenOutput())
        For x=0 To 1023
          For y=0 To 767
            Plot(x, y, Bildschirm(x, y))
          Next y
        Next x
      StopDrawing()
    FlipBuffers()
  Until KeyboardPushed(#PB_Key_Escape)
EndIf
Eine Art Query-Planner soll die Ausführung von Map/Reduce-Funktionen in Hadoop stark beschleunigen.
spider84
Beiträge: 76
Registriert: 05.03.2008 03:06

Beitrag von spider84 »

danke erstmal an die ganzen Beiträge. Das mit dem ClearScreen hatte ich nachträglich (dummerweise an der falschen Stelle) eingefügt, nachdem er mir oft genug einen schwarzen Bildschirm geplottet hat und ich schon überlegt habe ob man Sprites überhaupt vom Bildschirm ablesen kann.
Sollte nur quick&dirty arrays demonstrieren.
So wie es THEEX dann gemacht hat... danke!
Antworten