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)); }
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() }); }
/// <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; } }
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); }
public void LoadFromStream(Stream file) { tex2D = KtxFile.Load(file, false); }