Пример #1
0
        private static void ExportR16ToDDS(Stream destination, Stream source, DDSConvertParameters @params)
        {
            DDSConvertParameters bgraParams = new DDSConvertParameters();

            @params.CopyTo(bgraParams);
            bgraParams.RGBBitCount = 32;
            bgraParams.RBitMask    = 0xFF0000;
            bgraParams.GBitMask    = 0xFF00;
            bgraParams.BBitMask    = 0xFF;
            bgraParams.ABitMask    = 0xFF000000;
            ExportDDSHeader(destination, bgraParams);

            using (BinaryReader binReader = new BinaryReader(source, Encoding.UTF8, true))
            {
                long pixelCount = @params.BitMapDepth * @params.Height * @params.Width;
                for (int i = 0; i < pixelCount; i++)
                {
                    ushort pixel = binReader.ReadUInt16();
                    float  f     = Half.ToHalf(pixel);
                    byte   R     = (byte)Math.Ceiling(f * 255.0);
                    destination.WriteByte(0);                           // B
                    destination.WriteByte(0);                           // G
                    destination.WriteByte(R);                           // R
                    destination.WriteByte(0xFF);                        // A
                }
            }
        }
Пример #2
0
        private static void ExportRGBA32ToDDS(Stream destination, Stream source, DDSConvertParameters @params)
        {
            DDSConvertParameters bgraParams = new DDSConvertParameters();

            @params.CopyTo(bgraParams);
            bgraParams.RBitMask = 0xFF0000;
            bgraParams.BBitMask = 0xFF;
            ExportDDSHeader(destination, bgraParams);

            using (BinaryReader binReader = new BinaryReader(source, Encoding.UTF8, true))
            {
                long pixelCount = @params.BitMapDepth * @params.Height * @params.Width;
                for (int i = 0; i < pixelCount; i++)
                {
                    byte R = binReader.ReadByte();
                    byte G = binReader.ReadByte();
                    byte B = binReader.ReadByte();
                    byte A = binReader.ReadByte();
                    destination.WriteByte(B);                         // B
                    destination.WriteByte(G);                         // G
                    destination.WriteByte(R);                         // R
                    destination.WriteByte(A);                         // A
                }
            }
        }
Пример #3
0
        private static void ExportRGBA16ToDDS(Stream destination, Stream source, DDSConvertParameters @params)
        {
            DDSConvertParameters bgraParams = new DDSConvertParameters();

            @params.CopyTo(bgraParams);
            bgraParams.RBitMask = 0xF00;
            bgraParams.BBitMask = 0xF;
            ExportDDSHeader(destination, bgraParams);

            using (BinaryReader binReader = new BinaryReader(source, Encoding.UTF8, true))
            {
                long pixelCount = @params.BitMapDepth * @params.Height * @params.Width;
                for (int i = 0; i < pixelCount; i++)
                {
                    int pixel = binReader.ReadUInt16();
                    int c1    = (0x00F0 & pixel) >> 4;                      // B
                    int c2    = (0x0F00 & pixel) >> 4;                      // G
                    destination.WriteByte((byte)(c1 | c2));
                    c1 = (0xF000 & pixel) >> 12;                            // R
                    c2 = (0x000F & pixel) << 4;                             // A
                    destination.WriteByte((byte)(c1 | c2));
                }
            }
        }