You can do a pixel-by-pixel fast copy on locked buffers with this loop
For x = 0 to 800
For y = 0 to 600
CopyPixelFast(x,y,ImageBuffer(source_image),800-x,600-y)
Next
Next
This is probably as fast a 180 degree rotation as you'll get. If you want to flip the image rather than rotate, lose the '800-x' in the destination parameter and just use 'x'.
However B3D's 2D blitting performance seems weak to me. The manual example of this still takes a few milliseconds to copy half a screen of data. I'm unsure why you're wanting to do this. If the image is upside down, why not reverse it before loading it? If the image is the right way up but appears upside down on screen, you're likely drawing your object wrong, such as it being inside out, upside down, or just having wrong UV coords. Or are wanting a copy of the image, so you've right way up and flipped available at the same time?
For x = 0 to 800
For y = 0 to 600
CopyPixelFast(x,y,ImageBuffer(source_image),800-x,600-y)
Next
Next
This is probably as fast a 180 degree rotation as you'll get. If you want to flip the image rather than rotate, lose the '800-x' in the destination parameter and just use 'x'.
However B3D's 2D blitting performance seems weak to me. The manual example of this still takes a few milliseconds to copy half a screen of data. I'm unsure why you're wanting to do this. If the image is upside down, why not reverse it before loading it? If the image is the right way up but appears upside down on screen, you're likely drawing your object wrong, such as it being inside out, upside down, or just having wrong UV coords. Or are wanting a copy of the image, so you've right way up and flipped available at the same time?