Seite 2 von 3

Verfasst: 07.11.2004 16:03
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 !

Verfasst: 07.11.2004 16:10
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. :?

Verfasst: 07.11.2004 16:20
von Robert Wünsche
Doch, aber man soll nicht rummäckern !
vergessen wir das einfach :wink: .

Verfasst: 07.11.2004 16:28
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)?

Verfasst: 07.11.2004 17:06
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

Verfasst: 07.11.2004 17:36
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() ?

Verfasst: 07.11.2004 18:07
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.

Verfasst: 07.11.2004 18:28
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?

Verfasst: 07.11.2004 18:49
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.

Verfasst: 07.11.2004 18:58
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.