private static int Unpack565(byte[] packed, int packedOffset, byte[] colour, int colourOffset)
{
// Build the packed value.
var value = (int)packed[packedOffset] | ((int)packed[packedOffset + 1] << 8);
// Get the components in the stored range.
var red = (byte)((value >> 11) & 0x1F);
var green = (byte)((value >> 5) & 0x3F);
var blue = (byte)(value & 0x1F);
// Scale up to 8 bits
colour[colourOffset + 0] = (byte)((red << 3) | (red >> 2));
colour[colourOffset + 1] = (byte)((green << 2) | (green >> 4));
colour[colourOffset + 2] = (byte)((blue << 3) | (blue >> 2));
colour[colourOffset + 3] = 255;
return value;
}