PutPixel(x,y, ired,igre,iblu, t)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Robert Wünsche
Beiträge: 243
Registriert: 29.08.2004 12:46
Wohnort: Irgendwo im nirgendwo
Kontaktdaten:

Beitrag von Robert Wünsche »

Man dafs ihm auch nicht übel nehmen !
Schließlich hat er pB geproggt !
Also ich wöllte und könnte sowas nicht schaffen !
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Man dafs ihm auch nicht übel nehmen !
Schließlich hat er pB geproggt !
Wo ist denn da jetzt der Zusammenhang? Dann dürfte man sich ja überhaupt nicht über Bugs beschweren. :?
Robert Wünsche
Beiträge: 243
Registriert: 29.08.2004 12:46
Wohnort: Irgendwo im nirgendwo
Kontaktdaten:

Beitrag von Robert Wünsche »

Doch, aber man soll nicht rummäckern !
vergessen wir das einfach :wink: .
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Doch, aber man soll nicht rummäckern !
vergessen wir das einfach
Wer meckert hier rum?? In Danilos post steht doch nix davon, dass irgendjemand Fred irgendetwas übel nimmt.
Er berichtet ja nur, dass Bugs, die zwischenzeitlich mal gefixt waren wieder auftauchen,
und das ohne jeglichen wertenden Kommentar.

Und wie definiertst du den Unterschied zwischen Bugreport und "rummäckern" (sic)?
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Hm, eigentlich hatte ich schon, als der Thread aufgemacht wurde, vor den ein bisl schneller zu machen, habs dann aber doch gelassen. Aber wenn hier schon alle fleißig um jede Nano-Sekunde ringen will ich auch mitmachen ;)
Ich benutze allerdings meine MixColors()-Proc weil die einfach viel schneller ist, nur für 16-bit ist die nicht zu gebrauchen:

Code: Alles auswählen

;Putpixel - plots a translucid pixel  
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
;Ich weiss nicht genau, wie PutPixel  
;in höheren Farbtiefen läuft, müsste  
;aber im Prinzip relativ fehlerfrei  
;laufen. Benutzung auf eigene Gefahr ;] 
;                    
;best viewed in jaPBe          


Structure LONG_WORD
  StructureUnion
    l.l
    w.w
  EndStructureUnion
EndStructure
Global DrawingBuffer, DrawingBufferPitch, DrawingBufferPixelFormat
Declare PutPixel(x,y, c, t) 

#ScreenWidth=640 
#ScreenHeight=480 

Dim rect(20,4) 
For z=1 To 20 
  rect(z,0)=Random(#ScreenWidth-50) 
  rect(z,1)=Random(#ScreenHeight-50) 
  rect(z,2)=Random(100)+155 
  rect(z,3)=Random(100)+155 
  rect(z,4)=Random(100)+155 
Next 

Global MX,MY,z 

InitSprite() 
OpenWindow(0,0,0,700,500,#PB_Window_SystemMenu,"Test") 
OpenWindowedScreen(WindowID(),0,0,640,480, #False,0,0) 
InitMouse() 
  
Repeat 
  ExamineMouse() 
  ClearScreen(255,255,255) 
  StartDrawing(ScreenOutput()) 
  DrawingMode(0) 
  For z=1 To 20 
    Box(rect(z,0),rect(z,1), 50,50, RGB(rect(z,2),rect(z,3),rect(z,4))) 
  Next 
  MX=MouseX() 
  MY=MouseY() 
  DrawingMode(4) 
  Box(MX-1,MY-1, 42,42, 0)
  
  DrawingBuffer = DrawingBuffer():DrawingBufferPitch = DrawingBufferPitch():DrawingBufferPixelFormat = DrawingBufferPixelFormat()
  For zx=0 To 39
    For zy=0 To 39
      DrawText( Str(MX)+" "+Str(MY)+"|") 
      PutPixel(MX+zx,MY+zy, 100|255<<8|155<<16, 50) 
      ;Plot(mx+zx,my+zy,$7F7F7F) 
    Next 
  Next 
  StopDrawing() 
  FlipBuffers() 
Until MouseButton(1) 

Procedure PutPixel(x,y, c, t)
  Protected *DBP.LONG_WORD
  If DrawingBufferPixelFormat >= #PB_PixelFormat_32Bits_RGB
    *DBP = DrawingBuffer+x*4+y*DrawingBufferPitch
    If *DBP >= DrawingBuffer And *DBP < DrawingBuffer+#ScreenHeight*DrawingBufferPitch
      *DBP\l = MixColors(c,*DBP\l,t,100-t)
    EndIf
  ElseIf DrawingBufferPixelFormat >= #PB_PixelFormat_24Bits_RGB
    *DBP = DrawingBuffer+x*3+y*DrawingBufferPitch
    If *DBP >= DrawingBuffer And *DBP < DrawingBuffer+#ScreenHeight*DrawingBufferPitch
      *DBP\l = MixColors(c,*DBP\l,t,100-t)|*DBP\l&$FF000000
    EndIf
  ElseIf DrawingBufferPixelFormat >= #PB_PixelFormat_16Bits
    If x >= 0 And y >= 0 And x < #ScreenWidth And y < #ScreenHeight
      Plot(x,y,MixColors(c,Point(x,y),t,100-t))
    EndIf
  EndIf 
EndProcedure
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Deeem2031 hat geschrieben:Ich benutze allerdings meine MixColors()-Proc weil die einfach viel schneller ist, nur für 16-bit ist die nicht zu gebrauchen:
Du könntest ja 4 Versionen davon machen, schliesslich willst
Du 4 Formate unterstützen:
#PB_PixelFormat_24Bits_RGB
#PB_PixelFormat_24Bits_BGR
#PB_PixelFormat_32Bits_RGB
#PB_PixelFormat_32Bits_BGR

Wär doch eine Möglichkeit, oder?
MixColors24RGB()
MixColors24BGR()
MixColors32RGB()
MixColors32BGR()

Dann das ganze für Win+Linux (+Mac) und alles ist schön. :)

Vielleicht schaffst Du auch noch MixColors15() und MixColors16() ?
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von NicTheQuick »

Also der Code von Deeem2031 funktioniert bei nicht. Die errechneten Pixel, die eigentlich in dem Quadrat liegen solltenm, liegen irgendwie horizontal verteilt irgendwo auf dem Screen, wurden also wahrscheinlich nicht richtig in den Speicherbereich geschrieben.

@Danilo: Ich schätze mal der Funktion [c]MixColors()[/c] ist es egal, ob die Farben RGB oder BGR sind, allerdings unterstützt sie eben nur 24-Bit-Variablen. Die oberen 8 Bits werden nicht verarbeitet. Die Funktion mischt sozusagen einfach nur zwei Long byteweise in dem entsprechenden Verhältnis.
Bild
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

@Danilo: Wie NTQ schon sagte ist es egal ob das RGB oder BGR Farbwerte sind, gemischt wird ja genauso. Zwischen 24bit und 32bit is ja auch nur der Unterschied das es einen Alphachannel gibt der bei MixColors allerdings ignoriert wird.
Man könnt allerdings eine MixColors16()-Proc schreiben um 16-bit Werte zu mischen..

@NTQ: Hab keine Ahnung woran das liegen könnte, benutzt du denn 16,24 oder 32bit Farbtiefe?
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

OK, Deeem und Nic. War etwas verwirrt, weil Deeem nur
#PB_PixelFormat_32Bits_RGB und #PB_PixelFormat_24Bits_RGB
in seinem Code hatte.
Bei den 2 BGR-Formaten macht diese PutPixel-Routine nichts,
da diese einfach ausgelassen wurden.

Deshalb dachte ich ein MixColor32BGR könnte gleich noch
RGB in BGR drehen, so daß dann gleich die korrekte gemixte
Farbe für BGR rauskommt, obwohl man es mit den gleichen
Argumenten wie MixColors32RGB aufruft.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Danilo hat geschrieben:OK, Deeem und Nic. War etwas verwirrt, weil Deeem nur
#PB_PixelFormat_32Bits_RGB und #PB_PixelFormat_24Bits_RGB
in seinem Code hatte.
Bei den 2 BGR-Formaten macht diese PutPixel-Routine nichts,
da diese einfach ausgelassen wurden.
Ist so nicht richtig, ich hab nämlich ein ">= #PB_PixelFormat_32Bits_RGB" drin und kein "=", desswegen werden auch die BGR_Werte gemischt.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Antworten