I learned the hard way about the odd way graphics card have to deal with 16 bit colour, and that feeding the true r,g,b value to setmaskcolor is asking for trouble.
I thought I'd use the method I used in B2/B+ to solve it. Write the pixel and read it back. Initial confusion was quickly solved when I realised pixmaps are always 32bit regardless of screen depth. So I wrote to the backbuffer, grabbed it, tested the pixel.
Sure enough the r,g,b returned is different in 16bit, but when I set my mask to the value I've just readpixelled from the back buffer I get a very odd effect. Observe...
The orignal image:

The 32 bit grab (Appears as I expect it to)

The 16 bit grab

Very strange. Feel free to check the original image, that odd pattern in the mask isn't down to some bizarre hatching I stuck in the background.
Any ideas folks?
I thought I'd use the method I used in B2/B+ to solve it. Write the pixel and read it back. Initial confusion was quickly solved when I realised pixmaps are always 32bit regardless of screen depth. So I wrote to the backbuffer, grabbed it, tested the pixel.
Sure enough the r,g,b returned is different in 16bit, but when I set my mask to the value I've just readpixelled from the back buffer I get a very odd effect. Observe...
The orignal image:

The 32 bit grab (Appears as I expect it to)

The 16 bit grab

Very strange. Feel free to check the original image, that odd pattern in the mask isn't down to some bizarre hatching I stuck in the background.
Any ideas folks?