private static async Task <ImageData> RunFileTestAsync(string imageFileName, bool deleteFile, bool runTest)
        {
            if (imageFileName is null)
            {
                throw new ArgumentNullException(nameof(imageFileName));
            }

            if (imageFileName.Length == 0)
            {
                throw new ArgumentException("path must not be empty string", nameof(imageFileName));
            }

            var myPictures    = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
            var cacheFileName = Path.Combine(myPictures, imageFileName);
            var cacheFile     = new FileInfo(cacheFileName);

            if (deleteFile && cacheFile.Exists)
            {
                cacheFile.Delete();
            }

            var cache = new CachingStrategy
            {
                new FileCacheLayer(cacheFile.Directory)
            };

            var imageRequest = new ImageRequest(
                new Uri("https://www.seanmcbeth.com"),
                "2015-05.min.jpg");

            var imageDecoder = new JpegFactory(80).Pipe(new JpegCodec());

            var actual = await cache
                         .LoadAsync(imageDecoder, imageRequest)
                         .ConfigureAwait(false);

            if (runTest)
            {
                var path = Path.Combine(myPictures, "portrait-expected.jpg");
                using var stream = FileDataSource.Instance.GetStream(path);
                var expected     = imageDecoder.Deserialize(stream);
                var expectedData = expected.GetData();
                var actualData   = actual.GetData();
                Assert.AreEqual(expected.Info.Dimensions.Width, actual.Info.Dimensions.Width);
                Assert.AreEqual(expected.Info.Dimensions.Height, actual.Info.Dimensions.Height);
                Assert.AreEqual(expectedData.Length, actualData.Length);
                for (var i = 0; i < expectedData.Length; ++i)
                {
                    Assert.AreEqual(expectedData[i], actualData[i]);
                }
            }

            return(actual);
        }
Exemplo n.º 2
0
        public static void Main()
        {
            var desktopPath      = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            var desktopDirectory = new DirectoryInfo(desktopPath);
            var imageFile        = desktopDirectory
                                   .GetFiles("*.jpg")
                                   .First(f => f.Name.StartsWith("test", StringComparison.OrdinalIgnoreCase));

            using var imageStream = imageFile.OpenRead();
            var codec = new JpegFactory()
                        .Pipe(new JpegCodec());
            var image  = codec.Deserialize(imageStream);
            var spaces = new ColorSpace[]
            {
                ColorSpace.HSI,
                ColorSpace.HSL,
                ColorSpace.HSV,
                ColorSpace.RGB,
                ColorSpace.YCH_Adobe,
                ColorSpace.YCH_HDR,
                ColorSpace.YCH_SDTV,
                ColorSpace.YCH_sRGB
            };

            for (var s = 0; s < spaces.Length; ++s)
            {
                var images = new[]
                {
                    Resize(image, 0, 0, 3, spaces[s]),
                    Resize(image, 1, 0, 3, spaces[s]),
                    Resize(image, 0, 1, 3, spaces[s]),
                    Resize(image, 1, 1, 3, spaces[s])
                };

                for (var i = 0; i < images.Length; ++i)
                {
                    var index = (s * images.Length) + i + 1;
                    var path  = Path.Combine(desktopDirectory.FullName, $"test ({index}).jpg");
                    codec.Serialize(path, images[i]);
                }
            }
        }