CSharpImageLibrary.Headers.DDS_Header.DetermineDDSSurfaceFormat C# (CSharp) Method

DetermineDDSSurfaceFormat() public static method

Determines DDS Surface Format given the header.
public static DetermineDDSSurfaceFormat ( DDS_Header ddspf ) : ImageEngineFormat
ddspf DDS_Header DDS PixelFormat structure.
return ImageEngineFormat
        public static ImageEngineFormat DetermineDDSSurfaceFormat(DDS_Header.DDS_PIXELFORMAT ddspf)
        {
            ImageEngineFormat format = ParseFourCC(ddspf.dwFourCC);

            if (format == ImageEngineFormat.Unknown)
            {
                // KFreon: Apparently all these flags mean it's a V8U8 image...
                if (ddspf.dwRGBBitCount == 16 &&
                           ddspf.dwRBitMask == 0x00FF &&
                           ddspf.dwGBitMask == 0xFF00 &&
                           ddspf.dwBBitMask == 0x00 &&
                           ddspf.dwABitMask == 0x00 &&
                           (ddspf.dwFlags & DDS_PFdwFlags.DDPF_SIGNED) == DDS_PFdwFlags.DDPF_SIGNED)
                    format = ImageEngineFormat.DDS_V8U8;

                // KFreon: Test for L8/G8
                else if (ddspf.dwABitMask == 0 &&
                        ddspf.dwBBitMask == 0 &&
                        ddspf.dwGBitMask == 0 &&
                        ddspf.dwRBitMask == 0xFF &&
                        ddspf.dwFlags == DDS_PFdwFlags.DDPF_LUMINANCE &&
                        ddspf.dwRGBBitCount == 8)
                    format = ImageEngineFormat.DDS_G8_L8;

                // KFreon: A8L8. This can probably be something else as well, but it seems to work for now
                else if (ddspf.dwRGBBitCount == 16 &&
                        ddspf.dwFlags == (DDS_PFdwFlags.DDPF_ALPHAPIXELS | DDS_PFdwFlags.DDPF_LUMINANCE))
                    format = ImageEngineFormat.DDS_A8L8;

                // KFreon: RGB. RGB channels have something in them, but alpha doesn't.
                else if (((ddspf.dwFlags & DDS_PFdwFlags.DDPF_RGB) == DDS_PFdwFlags.DDPF_RGB && !((ddspf.dwFlags & DDS_PFdwFlags.DDPF_ALPHAPIXELS) == DDS_PFdwFlags.DDPF_ALPHAPIXELS)) ||
                        ddspf.dwABitMask == 0 &&
                        ddspf.dwBBitMask != 0 &&
                        ddspf.dwGBitMask != 0 &&
                        ddspf.dwRBitMask != 0)
                    format = ImageEngineFormat.DDS_RGB;

                // KFreon: RGB and A channels are present.
                else if (((ddspf.dwFlags & (DDS_PFdwFlags.DDPF_RGB | DDS_PFdwFlags.DDPF_ALPHAPIXELS)) == (DDS_PFdwFlags.DDPF_RGB | DDS_PFdwFlags.DDPF_ALPHAPIXELS)) ||
                        ddspf.dwABitMask != 0 &&
                        ddspf.dwBBitMask != 0 &&
                        ddspf.dwGBitMask != 0 &&
                        ddspf.dwRBitMask != 0)
                    format = ImageEngineFormat.DDS_ARGB;

                // KFreon: If nothing else fits, but there's data in one of the bitmasks, assume it can be read.
                else if (ddspf.dwABitMask != 0 || ddspf.dwRBitMask != 0 || ddspf.dwGBitMask != 0 || ddspf.dwBBitMask != 0)
                    format = ImageEngineFormat.DDS_CUSTOM;
                else
                    throw new FormatException("DDS Format is unknown.");
            }

            return format;
        }