private static UnpackDXTColour ( int colour, byte destination, int position, bool isPremultiplied ) : void | ||
colour | int | Colour to convert to RGB |
destination | byte | Decompressed array. |
position | int | Position in destination to write RGB at. |
isPremultiplied | bool | True = RGB interpreted as being premultiplied with A channel. |
return | void |
private static void UnpackDXTColour(int colour, byte[] destination, int position, bool isPremultiplied)
{
double alpha = isPremultiplied ? (destination[position + 3] / 255d) : 1d; // Normalise to 0-1.
// Read RGB 5:6:5 data, expand to 8 bit.
destination[position + 2] = (byte)(((colour & 0xF800) >> 8) / alpha); // Red, but format is BGR, so last
destination[position + 1] = (byte)(((colour & 0x7E0) >> 3) / alpha); // Green
destination[position] = (byte)(((colour & 0x1F) << 3) / alpha); // Blue
}