CopyPixelFast() doesn't work

Blitz3D Forums/Blitz3D Beginners Area/CopyPixelFast() doesn't work

Shifty Geezer(Posted 2005) [#1]
Trying to write data to the front buffer, I find CopyPixelFast doesn't work - I get a memory access error.

Running the example code gives exactly the same problem, and mangles the mouse pointer graphic. The faulty code is listed here
pic=LoadImage("media/blitz_pic.bmp")

LockBuffer

For y=0 To (ImageHeight(pic)/2)+ImageHeight(pic)
	For x=0 To ImageWidth(pic)
		CopyPixelFast x,y,ImageBuffer(pic),x,y
	Next
Next

UnlockBuffer

WaitKey()

I've tried cahnging buffers, locking FrontBuffer() and ImageBuffer(), but nowt works.


Stevie G(Posted 2005) [#2]
You need to specify which buffer you're locking explicitly.

i.e. Lockbuffer imagebuffer( myimage )


Shifty Geezer(Posted 2005) [#3]
Tried that. Tried LockBuffer FrontBuffer(), LockBuffer BackBuffer(), and LockBuffer (Imagebuffer(pic)) and combinations of the three, making I sure I copy from ImageBuffer(pic) to either FrontBuffer() or BackBuffer(), whichever I've locked.

Still don't work though!


PowerPC603(Posted 2005) [#4]
Try this code (tested):
Graphics 1024, 768, 0, 1

SetBuffer BackBuffer()

pic=LoadImage("test.bmp")

LockBuffer ImageBuffer(pic)
LockBuffer BackBuffer()

For y=0 To ImageHeight(pic)
	For x=0 To ImageWidth(pic)
		CopyPixelFast x,y,ImageBuffer(pic),x,y, BackBuffer()
	Next
Next

UnlockBuffer BackBuffer()
UnlockBuffer ImageBuffer(pic)

SetBuffer BackBuffer()
Flip

WaitKey()

You have to lock and unlock both buffers.
Or you will get a MAV.
Note: this doesn't work when using windowed mode (just found out myself).


Shifty Geezer(Posted 2005) [#5]
That works. Dunno what I missed. It also works windowed.

thanks


Ross C(Posted 2005) [#6]
You sometimes have to actually specify the buffers your using. I know the docs say that if no buffer is specified, it uses the current drawing buffer, but best to put it in anyway. Some times fails if not :o)