// // Copyright (c) James Jackson-South and contributors. // Licensed under the Apache License, Version 2.0. // namespace ImageSharp.Tests.Formats.Png { using System; using System.Collections.Generic; using System.Text; using System.IO; using Xunit; using ImageSharp.Formats; using System.Linq; using ImageSharp.IO; using System.Numerics; using ImageSharp.PixelFormats; public class PngSmokeTests { [Theory] [WithTestPatternImages(300, 300, PixelTypes.StandardImageClass)] public void GeneralTest(TestImageProvider provider) where TPixel : struct, IPixel { // does saving a file then repoening mean both files are identical??? using (Image image = provider.GetImage()) using (MemoryStream ms = new MemoryStream()) { // image.Save(provider.Utility.GetTestOutputFileName("bmp")); image.Save(ms, new PngEncoder()); ms.Position = 0; using (Image img2 = Image.Load(ms, new PngDecoder())) { // img2.Save(provider.Utility.GetTestOutputFileName("bmp", "_loaded"), new BmpEncoder()); ImageComparer.CheckSimilarity(image, img2); } } } [Theory] [WithTestPatternImages(100, 100, PixelTypes.StandardImageClass)] public void CanSaveIndexedPng(TestImageProvider provider) where TPixel : struct, IPixel { // does saving a file then repoening mean both files are identical??? using (Image image = provider.GetImage()) using (MemoryStream ms = new MemoryStream()) { // image.Save(provider.Utility.GetTestOutputFileName("bmp")); image.MetaData.Quality = 256; image.Save(ms, new PngEncoder()); ms.Position = 0; using (Image img2 = Image.Load(ms, new PngDecoder())) { // img2.Save(provider.Utility.GetTestOutputFileName("bmp", "_loaded"), new BmpEncoder()); ImageComparer.CheckSimilarity(image, img2, 0.03f); } } } // JJS: Commented out for now since the test does not take into lossy nature of indexing. //[Theory] //[WithTestPatternImages(100, 100, PixelTypes.Color)] //public void CanSaveIndexedPngTwice(TestImageProvider provider) // where TPixel : struct, IPixel //{ // // does saving a file then repoening mean both files are identical??? // using (Image source = provider.GetImage()) // using (MemoryStream ms = new MemoryStream()) // { // source.MetaData.Quality = 256; // source.Save(ms, new PngEncoder(), new PngEncoderOptions { // Threshold = 200 // }); // ms.Position = 0; // using (Image img1 = Image.Load(ms, new PngDecoder())) // { // using (MemoryStream ms2 = new MemoryStream()) // { // img1.Save(ms2, new PngEncoder(), new PngEncoderOptions // { // Threshold = 200 // }); // ms2.Position = 0; // using (Image img2 = Image.Load(ms2, new PngDecoder())) // { // using (PixelAccessor pixels1 = img1.Lock()) // using (PixelAccessor pixels2 = img2.Lock()) // { // for (int y = 0; y < img1.Height; y++) // { // for (int x = 0; x < img1.Width; x++) // { // Assert.Equal(pixels1[x, y], pixels2[x, y]); // } // } // } // } // } // } // } //} [Theory] [WithTestPatternImages(300, 300, PixelTypes.StandardImageClass)] public void Resize(TestImageProvider provider) where TPixel : struct, IPixel { // does saving a file then repoening mean both files are identical??? using (Image image = provider.GetImage()) using (MemoryStream ms = new MemoryStream()) { // image.Save(provider.Utility.GetTestOutputFileName("png")); image.Resize(100, 100); // image.Save(provider.Utility.GetTestOutputFileName("png", "resize")); image.Save(ms, new PngEncoder()); ms.Position = 0; using (Image img2 = Image.Load(ms, new PngDecoder())) { ImageComparer.CheckSimilarity(image, img2); } } } } }