Seite 2 von 2

Verfasst: 07.03.2005 13:58
von DrShrek
remi_meier hat geschrieben:.... und es noch schneller ginge...
Zeig mal bitte Deine (schnellere) Version. Bin neugierig :wink:

Verfasst: 07.03.2005 21:07
von remi_meier
Hier noch mit PB-Mitteln:

Code: Alles auswählen

InitSprite() 
OpenWindow(0, 200,200, 300,300, #PB_Window_SystemMenu, "") 
OpenWindowedScreen(WindowID(0), 0, 0, 300, 300, 0, 0, 0) 

Img = CreateSprite(#PB_Any, 300, 300) 

x = 16 
y = 16 
n = 255 

StartDrawing(ScreenOutput())  
For r = 0 To n 
  For s = 0 To n-r 
    If (r & s) 
      cR.l = 64+r/4
      cG.l = s/4
      cB.l = s/2+64
      ;Plot(x+r+5, y+s+5, RGB(64+r/4, s/4, s/2+64))
      Plot(x+r+5, y+s+5, ((cB)<<16)|((cG)<<8)|(cR)); (((64+r4)<<15)| ((s/4)<<7)| ((s/2+64)))) 
      ;Plot(x+6+n-r,y+6+n-s, RGB(s/4, 64+r/4, s/2+64))
      Plot(x+6+n-r, y+6+n-s, ((cB)<<16)|((cR)<<8)|(cG))
    Else
      cR = 128+r/4
      cG = s/2
      cB = s/2+128
      ; Plot(x+r+5, y+s+5, RGB(128+r/4,s/2,s/2+128)) 
      Plot(x+r+5, y+s+5, ((cB)<<16)|((cG)<<8)|(cR))
      ; Plot(x+6+n-r, y+6+n-s, RGB(s/2,128+r/4,s/2+128) )
      Plot(x+6+n-r, y+6+n-s, ((cB)<<16)|((cR)<<8)|(cG))  
    EndIf 
  Next s 
Next r 
StopDrawing() 

Repeat 
  Event = WaitWindowEvent() 
  If Event = 0 
    Delay(1) 
  EndIf 
Until Event = #PB_Event_CloseWindow
Mit ASM gehts natürlich noch schneller :D
Vielleicht gibt es auch noch n schnelleren Algorithmus :roll:

Verfasst: 08.03.2005 09:20
von DrShrek
Danke! :wink:

Verfasst: 12.03.2005 19:59
von remi_meier
Ok Danilo :D

Code: Alles auswählen

Img = CreateImage(#PB_Any, 500, 500) 
StartDrawing(ImageOutput()) 
  For x = 0 To 500 
    For y = 0 To 500 
      If x & y <> 0  
        Plot(x,y, $FF) 
      EndIf 
    Next y 
  Next x 
StopDrawing() 

OpenWindow(0, 200,200, 500,500, #PB_Window_SystemMenu, "") 
CreateGadgetList(WindowID())
ImageGadget(0, 0, 0, 500, 500, UseImage(Img))


Repeat 
  Event = WaitWindowEvent() 
Until Event = #PB_Event_CloseWindow
:wink:

PS: Das ist die offiziel (von Danilo bestätigte) richtige Version ein Image auf einem Fenster anzuzeigen!
Aber wie gesagt, war eigentlich nur ein Test...

Verfasst: 16.03.2005 19:57
von FloHimself

Code: Alles auswählen

  If Event = 0 
    Delay(1) 
  EndIf 
Was macht das?

Verfasst: 16.03.2005 20:36
von remi_meier
Jo mist, danke!
Das war, als ich Nicht WaitWindowEvent() sondern WindowEvent() benutzt habe :wink: . (simuliert das 'Wait').
cu
Remi

Verfasst: 17.03.2005 18:52
von Danilo
remi_meier hat geschrieben:Ok Danilo :D
[...]
Aber wie gesagt, war eigentlich nur ein Test...
Danke! Funktioniert nun auch auf Linux korrekt und das
neuzeichnen geht automatisch... ;)