int GetDX10BitCount(DDS_Header.DXGI_FORMAT DX10Format)
            {
                int dx10Format = 32;

                switch (DX10Format)
                {
                    // For now, 32 works.
                }

                return(dx10Format);
            }
            /// <summary>
            /// Details the given format.
            /// </summary>
            /// <param name="dxgiFormat">Optional DX10 format. Default = Unknown.</param>
            /// <param name="inFormat">Image Format.</param>
            public DDSFormatDetails(DDSFormat inFormat, DDS_Header.DXGI_FORMAT dxgiFormat = new DDS_Header.DXGI_FORMAT())
            {
                Format = inFormat;

                DX10Format = dxgiFormat;

                BitCount = 8;
                {
                    switch (inFormat)
                    {
                    case DDSFormat.DDS_G8_L8:
                    case DDSFormat.DDS_A8:
                    case DDSFormat.DDS_ATI1:
                        BitCount = 8;
                        break;

                    case DDSFormat.DDS_A8L8:
                    case DDSFormat.DDS_V8U8:
                    case DDSFormat.DDS_ATI2_3Dc:
                        BitCount = 16;
                        break;

                    case DDSFormat.DDS_ABGR_8:
                    case DDSFormat.DDS_ARGB_8:
                    case DDSFormat.DDS_DXT1:
                    case DDSFormat.DDS_DXT2:
                    case DDSFormat.DDS_DXT3:
                    case DDSFormat.DDS_DXT4:
                    case DDSFormat.DDS_DXT5:
                    case DDSFormat.DDS_G16_R16:
                        BitCount = 32;
                        break;

                    case DDSFormat.DDS_RGB_8:
                        BitCount = 24;
                        break;

                    case DDSFormat.DDS_ARGB_32F:
                        DX10Format = DDS_Header.DXGI_FORMAT.DXGI_FORMAT_R32G32B32A32_FLOAT;
                        BitCount   = 128;
                        break;

                    case DDSFormat.DDS_R5G6B5:
                        BitCount = 16;
                        break;

                    case DDSFormat.DDS_ARGB_4:
                    case DDSFormat.DDS_CUSTOM:
                    case DDSFormat.DDS_DX10:
                        BitCount = GetDX10BitCount(DX10Format);
                        break;
                    }
                }

                // Functions
                ReadByte          = ReadByteFromByte;
                ReadUShort        = ReadUShortFromByte;
                ReadFloat         = ReadFloatFromByte;
                SetMaxValue       = WriteByteMax;
                WriteColor        = WriteByte;
                ReadUShortAsArray = ReadUShortFromByteAsArray;
                ReadFloatAsArray  = ReadFloatFromByteOrUShortAsArray;

                if (ComponentSize == 2)
                {
                    ReadByte          = ReadByteFromUShort;
                    ReadUShort        = ReadUShortFromUShort;
                    ReadFloat         = ReadFloatFromUShort;
                    SetMaxValue       = WriteUShortMax;
                    WriteColor        = WriteUShort;
                    ReadUShortAsArray = ReadUShortFromUShortAsArray;
                    // Don't need ReadFloatAsArray set here, as it's shared between byte and ushort reading.
                }
                else if (ComponentSize == 4)
                {
                    ReadByte          = ReadByteFromFloat;
                    ReadUShort        = ReadUShortFromFloat;
                    ReadFloat         = ReadFloatFromFloat;
                    SetMaxValue       = WriteFloatMax;
                    WriteColor        = WriteFloat;
                    ReadUShortAsArray = ReadUShortFromFloatAsArray;
                    ReadFloatAsArray  = ReadFloatFromFloatAsArray;
                }


                switch (inFormat)
                {
                case DDSFormat.DDS_ATI1:
                    BlockEncoder = DDS_Encoders.CompressBC4Block;
                    break;

                case DDSFormat.DDS_ATI2_3Dc:
                    BlockEncoder = DDS_Encoders.CompressBC5Block;
                    break;

                case DDSFormat.DDS_DX10:
                    if (DX10Format.ToString().Contains("BC7"))
                    {
                        BlockEncoder = DDS_Encoders.CompressBC7Block;
                    }
                    else
                    {
                        BlockEncoder = DDS_Encoders.CompressBC6Block;
                    }
                    break;

                case DDSFormat.DDS_DXT1:
                    BlockEncoder = DDS_Encoders.CompressBC1Block;
                    break;

                case DDSFormat.DDS_DXT2:
                case DDSFormat.DDS_DXT3:
                    BlockEncoder = DDS_Encoders.CompressBC2Block;
                    break;

                case DDSFormat.DDS_DXT4:
                case DDSFormat.DDS_DXT5:
                    BlockEncoder = DDS_Encoders.CompressBC3Block;
                    break;
                }

                switch (inFormat)
                {
                case DDSFormat.DDS_DXT1:
                    BlockDecoder = DDS_Decoders.DecompressBC1Block;
                    break;

                case DDSFormat.DDS_DXT2:
                case DDSFormat.DDS_DXT3:
                    BlockDecoder = DDS_Decoders.DecompressBC2Block;
                    break;

                case DDSFormat.DDS_DXT4:
                case DDSFormat.DDS_DXT5:
                    BlockDecoder = DDS_Decoders.DecompressBC3Block;
                    break;

                case DDSFormat.DDS_ATI1:
                    BlockDecoder = DDS_Decoders.DecompressATI1Block;
                    break;

                case DDSFormat.DDS_ATI2_3Dc:
                    BlockDecoder = DDS_Decoders.DecompressATI2Block;
                    break;

                case DDSFormat.DDS_DX10:
                    if (DX10Format.ToString().Contains("BC7"))
                    {
                        BlockDecoder = DDS_Decoders.DecompressBC7Block;
                    }
                    else
                    {
                        BlockDecoder = DDS_Decoders.DecompressBC6Block;
                    }
                    break;
                }
            }