Hilfe

LockedPitch

B+

Aufruf

byte = LockedPitch( [buffer] )

Parameter

buffer Identität eines Buffers


Rückgabewert

Bytegröße für eine Zeile Grafik


Beschreibung

Die Funktion LockedPitch ermittelt die Größe in Byte, die für eine horizontale Zeile eines Grafikbuffers benötigt wird. Diese Größe hängt von Breite des Grafikbuffers und Farbtiefe ab. Dies ist dann nützlich, wenn Pixel direkt ins Video-RAM mit Poke/Peek-Befehlen gezeichnet/gelesen werden sollen und nicht mir WritePixel/ReadPixel. Dazu ist eine vorherige Sperrung des Grafikbuffers mit LockBuffer notwendig.

Direktes Zeichnen mit Poke ist deutlich schneller (bis zu 6x schneller als WritePixelFast). Jedoch muss man Speicherposition und Ausgabewert manuell berechnen. Dies ist nicht so einfach und nur mit Hilfe von LockedFormat, LockedPitch und LockedPixels möglich. Für schnelle Grafikausgabe muss man zudem für jedes Grafikformat eine gesonderte Routine programmieren!


Beispiel

Die erste Funktion zeichnet eine Linie und zweite Funktion berechnet eine Farbe:

Graphics 640, 480, 0, 2
SLineBP(50, 50, 300, 200, 255, 0, 0, BackBuffer())
Flip
WaitKey()
End

Function SLineBP(stx#, sty#, enx#, eny#, r, g, b, Buffer)
   mvx# = Stx - enx:mvy# = sty - eny
   If mvx<0 mvx = - mvx
   If mvy<0 mvy = - mvy
   If mvy>mvx mv# = mvy Else mv# = mvx
   stpx# = (mvx / mv):If Stx>enx stpx = - stpx
   stpy# = (mvy / mv):If Sty>eny stpy = - stpy
   LockBuffer Buffer
   SL_Pitch = LockedPitch(Buffer)
   SL_Bank = LockedPixels(Buffer)
   SL_Mode = LockedFormat(Buffer)
   Col = ConvertRGB(r, g, b, SL_Mode)
   DebugLog Hex(Col)
   If SL_Mode = 1 Or SL_Mode = 2
      For nc = 0 To Floor(mv)
         PokeShort SL_Bank, (Floor(stx) * 2) + (Floor(sty) * SL_Pitch), Col
         stx = stx + stpx:sty = sty + stpy
      Next
   Else
      For nc = 0 To Floor(mv)
         PokeInt SL_Bank, (Floor(sty) * SL_Pitch) + (Floor(stx) * 4), Col
         stx = stx + stpx:sty = sty + stpy
      Next
   EndIf
   UnlockBuffer Buffer
End Function

Function ConvertRGB(r, g, b, Mode = 0)
   Select Mode
      Case 1
         Return ((r / 8) Shl 11) Or ((g / 4) Shl 5) Or (b / 8)
      Case 2
         Return ((r / 8) Shl 10) Or ((g / 8) Shl 5) Or (b / 8)
      Default
         Return (r Shl 16) Or (g Shl 8) Or b
   End Select
End Function


Siehe auch

LockBuffer, LockedFormat, LockedPixels, UnlockBuffer

Übersicht 2D Grafik Pixel