PutPixel(x,y, ired,igre,iblu, t)
-
- Beiträge: 243
- Registriert: 29.08.2004 12:46
- Wohnort: Irgendwo im nirgendwo
- Kontaktdaten:
-
- Beiträge: 243
- Registriert: 29.08.2004 12:46
- Wohnort: Irgendwo im nirgendwo
- Kontaktdaten:
Wer meckert hier rum?? In Danilos post steht doch nix davon, dass irgendjemand Fred irgendetwas übel nimmt.Doch, aber man soll nicht rummäckern !
vergessen wir das einfach
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)?
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:
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
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Du könntest ja 4 Versionen davon machen, schliesslich willstDeeem2031 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 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
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
- 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:
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.
@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.
@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?
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?
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
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.
#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
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Ist so nicht richtig, ich hab nämlich ein ">= #PB_PixelFormat_32Bits_RGB" drin und kein "=", desswegen werden auch die BGR_Werte gemischt.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.
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]