Exemplo n.º 1
0
        public static float DecodeCheckPSNR(string filename, Image <Rgba32> original)
        {
            using FileStream fs = File.OpenRead(filename);
            var ktx     = KtxFile.Load(fs);
            var decoder = new BcDecoder();

            using var img = decoder.Decode(ktx);
            var pixels  = original.GetPixelSpan();
            var pixels2 = img.GetPixelSpan();

            return(ImageQuality.PeakSignalToNoiseRatio(pixels, pixels2, true));
        }
Exemplo n.º 2
0
        public ImageInfo Load(Stream input)
        {
            // Load Ktx file
            var ktxFile = KtxFile.Load(input);

            // Prepare main image data
            var imageData   = ktxFile.MipMaps[0].Faces[0].Data;
            var imageFormat = (int)ktxFile.header.GlInternalFormat;
            var size        = new Size((int)ktxFile.header.PixelWidth, (int)ktxFile.header.PixelHeight);

            // Prepare mip maps
            return(new ImageInfo(imageData, imageFormat, size)
            {
                MipMapData = ktxFile.MipMaps.Skip(1).Select(x => x.Faces[0].Data).ToArray()
            });
        }
Exemplo n.º 3
0
        /// <summary>
        /// Read a Ktx or a Dds file from a stream and decode it.
        /// </summary>
        public Image <Rgba32>[] DecodeAllMipMaps(Stream inputStream)
        {
            var position = inputStream.Position;

            try {
                if (inputStream is FileStream fs)
                {
                    var extension = Path.GetExtension(fs.Name).ToLower();
                    if (extension == ".ktx")
                    {
                        KtxFile file = KtxFile.Load(inputStream);
                        return(DecodeAllMipMaps(file));
                    }
                    else if (extension == ".dds")
                    {
                        DdsFile file = DdsFile.Load(inputStream);
                        return(DecodeAllMipMaps(file));
                    }
                }

                bool isDDS = false;
                using (var br = new BinaryReader(inputStream, Encoding.UTF8, true)) {
                    var magic = br.ReadUInt32();
                    if (magic == 0x20534444U)
                    {
                        isDDS = true;
                    }
                }

                inputStream.Seek(position, SeekOrigin.Begin);

                if (isDDS)
                {
                    DdsFile dds = DdsFile.Load(inputStream);
                    return(DecodeAllMipMaps(dds));
                }
                else
                {
                    KtxFile ktx = KtxFile.Load(inputStream);
                    return(DecodeAllMipMaps(ktx));
                }
            }
            catch (Exception) {
                inputStream.Seek(position, SeekOrigin.Begin);
                throw;
            }
        }
Exemplo n.º 4
0
        public void Bc4Decode()
        {
            using FileStream fs = File.OpenRead(@"../../../testImages/test_decompress_bc4_unorm.ktx");
            KtxFile file = KtxFile.Load(fs);

            Assert.True(file.Header.VerifyHeader());
            Assert.Equal((uint)1, file.Header.NumberOfFaces);

            BcDecoder decoder = new BcDecoder();

            using var image = decoder.Decode(file);

            Assert.Equal((uint)image.Width, file.Header.PixelWidth);
            Assert.Equal((uint)image.Height, file.Header.PixelHeight);

            using FileStream outFs = File.OpenWrite("decoding_test_bc4.png");
            image.SaveAsPng(outFs);
        }
Exemplo n.º 5
0
 public void LoadFromStream(Stream file)
 {
     tex2D = KtxFile.Load(file, false);
 }