High speed pixel reading from an image buffer. |
x = x location of the pixel to read y = y location of the pixel to read buffer = any valid screen/image buffer (optional) |
Command Description:
This command will allow you fast access to a specific pixel in the buffer selected. While this command reads the pixel quickly (and it can be written back quickly with WritePixelFast, it is still not fast enough for real-time screen effects. You are required to lock the buffer with LockBuffer and subsequently unlock the buffer with UnlockBuffer when the operations are complete before any other graphics commands can be used. WARNING: You are playing with power. There is nothing keeping you from writing directly to memory off the screen and TRASHING it. You can crash Blitz using this command. V1.52 and above: It has been necessary to make ReadPixel and ReadPixelFast "alpha-aware". This means that the high 8 bits of the color returned ReadPixel/ReadPixelFast now contain valid alpha information. However, in the case of Blitz2D apps, there is no alpha information in images! Mark decided that in the abscence of any alpha information, a pixel is assumed to have 'full' alpha. Therefore, values returned by ReadPixel/ReadPixelFast will now (usually) have their high 8 bits sets. The exception will be when reading pixels from Blitz3D textures created with an alpha channel. To get the old behaviour of v1.50 (and below) of ReadPixel/ReadPixelFast, use the following: rgb=ReadPixel( x,y ) And $FFFFFF This will 'mask out' the 8 high bits of alpha and return just the red, green and blue components of the pixel. |
Example:
; High Speed Graphics Commands Graphics 640,480,16 ; Draw a bunch of crap on the screen For t= 1 To 1000 Color Rnd(255),Rnd(255),Rnd(255) Rect Rnd(640),Rnd(480),Rnd(150),Rnd(150),Rnd(1) Next Delay 3000 ; Copy the top half of the screen over the bottom half ; using fast pixels and locked buffers LockBuffer FrontBuffer() For x = 1 To 640 For y = 1 To 240 WritePixelFast x,y+241,ReadPixelFast(x,y) Next Next UnlockBuffer FrontBuffer() Delay 3000 ; Draw the left half of the screen over the right half ; using the slower direct pixel access For x = 1 To 320 For y = 1 To 480 WritePixel x+320,y,ReadPixel(x,y) Next Next |