public void ExtractRegionFullSize(int x, int y, int width, int height)
        {
            var filename = Path.GetFullPath(@"test_image.tif");
            var request  = new ImageRequest
                           (
                "",
                new ImageRegion(ImageRegionMode.Region, x, y, width, height),
                new ImageSize(ImageSizeMode.Full),
                new ImageRotation(0, false),
                ImageQuality.@default,
                ImageFormat.jpg
                           );

            (var state, var img) = TiffExpander.ExpandRegion(null, Log, new Uri(filename), request, false);
            using (img)
            {
                Assert.IsNotNull(img, "Image is null");
                Assert.AreEqual(width, img.Width, "Image width does not match expected width");
                Assert.AreEqual(height, img.Height, "Image height does not match expected height");

                using (var bmp = SKBitmap.FromImage(img))
                {
                    (var coli, var colj) = (x / 100, y / 100);
                    var colour = TestColours[coli, colj];
                    foreach (var c in bmp.Pixels.Distinct())
                    {
                        Assert.AreEqual(new SKColor(colour.Item1, colour.Item2, colour.Item3), c, "Expected colour values do not match");
                    }
                }
            }
        }
        public void ExtractSquareMax()
        {
            var filename = Path.GetFullPath(@"test_image.tif");
            var request  = new ImageRequest
                           (
                "",
                new ImageRegion(ImageRegionMode.Square),
                new ImageSize(ImageSizeMode.Max),
                new ImageRotation(0, false),
                ImageQuality.@default,
                ImageFormat.jpg
                           );

            (var state, var img) = TiffExpander.ExpandRegion(null, Log, new Uri(filename), request, false);
            using (img)
            {
                Assert.IsNotNull(img, "Image is null");
                Assert.AreEqual(1000, img.Width, "Image width does not match expected width");
                Assert.AreEqual(1000, img.Height, "Image height does not match expected height");

                using (var bmp = SKBitmap.FromImage(img))
                {
                    Assert.AreEqual(100, bmp.Pixels.Distinct().Count());
                }
            }
        }
コード例 #3
0
        public void MetadataFileNotFound()
        {
            var filename         = Path.GetFullPath(@"my_imaginary_file.tif");
            var defaultTileWidth = 512;

            var result = TiffExpander.GetMetadata(null, Log, new Uri(filename), defaultTileWidth, string.Empty);
        }
コード例 #4
0
        public void MetadataHttpError()
        {
            var handler = new Mock <MockHttpHandler>()
            {
                CallBase = true
            };

            handler
            .Setup(f => f.Send(It.IsAny <HttpRequestMessage>()))
            .Returns(new HttpResponseMessage
            {
                StatusCode = HttpStatusCode.InternalServerError
            });



            var httpClient = new HttpClient(handler.Object);

            var filename         = @"http://example.com/my_imaginary_file.tif";
            var defaultTileWidth = 512;

            try
            {
                TiffExpander.GetMetadata(httpClient, Log, new Uri(filename), defaultTileWidth, string.Empty);
            }
            catch (AggregateException ex)
            {
                throw ex.InnerException;
            }
        }
コード例 #5
0
        public void MetadataFromHttp()
        {
            var tiff = Path.GetFullPath(@"test_image.tif");

            using (var fs = File.OpenRead(tiff))
            {
                var handler = new Mock <MockHttpHandler>()
                {
                    CallBase = true
                };
                handler
                .Setup(f => f.Send(It.IsAny <HttpRequestMessage>()))
                .Returns(new HttpResponseMessage
                {
                    StatusCode = HttpStatusCode.OK,
                    Content    = new StreamContent(fs)
                });

                var httpClient = new HttpClient(handler.Object);

                var filename         = @"http://example.com/my_imaginary_file.tif";
                var defaultTileWidth = 512;
                var expectedWidth    = 1000;
                var expectedHeight   = 1000;

                var result = TiffExpander.GetMetadata(httpClient, Log, new Uri(filename), defaultTileWidth, string.Empty);

                Assert.IsNotNull(result);
                Assert.AreEqual(defaultTileWidth, result.TileWidth, "Returned TileWidth does not match expected value");
                Assert.AreEqual(0, result.TileHeight, "TileHeight should not be set");
                Assert.AreEqual(expectedWidth, result.Width, "Expected Width does not match returned value");
                Assert.AreEqual(expectedHeight, result.Height, "Expected Height does not match returned value");
                Assert.AreEqual(6, result.ScalingLevels, "Returned ScalingLevels does not match expected value");
            }
        }
コード例 #6
0
        public void MetadataHttpTaskCanceledException()
        {
            var handler = new Mock <MockHttpHandler>()
            {
                CallBase = true
            };

            handler
            .Setup(f => f.Send(It.IsAny <HttpRequestMessage>()))
            .Throws(new TaskCanceledException(Task.FromCanceled(new System.Threading.CancellationToken(true))));

            var httpClient = new HttpClient(handler.Object);

            var logger = new Mock <ILogger>();

            logger.Setup(l => l.Error(It.IsAny <Exception>(), It.IsAny <string>())).Verifiable();

            var filename         = @"http://example.com/my_imaginary_file.tif";
            var defaultTileWidth = 512;

            try
            {
                TiffExpander.GetMetadata(httpClient, logger.Object, new Uri(filename), defaultTileWidth, string.Empty);
            }
            catch (AggregateException ex)
            {
                logger.Verify(v => v.Error(It.IsAny <TaskCanceledException>(), "HTTP Request Cancelled"), Times.Once);
                throw ex.InnerException;
            }
        }
コード例 #7
0
        public void Metadata()
        {
            var filename         = Path.GetFullPath(@"test_image.tif");
            var defaultTileWidth = 512;
            var expectedWidth    = 1000;
            var expectedHeight   = 1000;

            var result = TiffExpander.GetMetadata(null, Log, new Uri(filename), defaultTileWidth, string.Empty);

            Assert.IsNotNull(result);
            Assert.AreEqual(defaultTileWidth, result.TileWidth, "Returned TileWidth does not match expected value");
            Assert.AreEqual(0, result.TileHeight, "TileHeight should not be set");
            Assert.AreEqual(expectedWidth, result.Width, "Expected Width does not match returned value");
            Assert.AreEqual(expectedHeight, result.Height, "Expected Height does not match returned value");
            Assert.AreEqual(6, result.ScalingLevels, "Returned ScalingLevels does not match expected value");
        }
コード例 #8
0
        /// <summary>
        /// Get Metadata fromt he source image, for info.json requests
        /// </summary>
        /// <param name="imageUri">The <see cref="Uri"/> of the source image</param>
        /// <param name="defaultTileWidth">The default tile width (pixels) if the source image is not natively tiled</param>
        /// <param name="requestId">The correlation ID to include on any subsequent HTTP requests</param>
        /// <returns></returns>
        public async Task <Metadata> GetMetadata(Uri imageUri, int defaultTileWidth, string requestId)
        {
            var sourceFormat = await Task.Run(() => GetSourceFormat(imageUri, requestId));

            switch (sourceFormat)
            {
            case ImageFormat.jp2:
                return(J2KExpander.GetMetadata(HttpClient, Log, imageUri, defaultTileWidth, requestId));

            case ImageFormat.tif:
                return(TiffExpander.GetMetadata(HttpClient, Log, imageUri, defaultTileWidth, requestId));

            default:
                throw new IOException("Unsupported source format");
            }
        }
コード例 #9
0
        /// <summary>
        /// Extract region from source image
        /// </summary>
        /// <param name="imageUri">The <see cref="Uri"/> of the source image</param>
        /// <param name="request">The <see cref="ImageRequest"/></param>
        /// <param name="allowSizeAboveFull">Allow the output size to exceed the original dimensions of the image</param>
        /// <param name="quality">The <see cref="ImageQuality"/> settings for encoding</param>
        /// <returns></returns>
        public async Task <(ProcessState, SKImage)> ExtractRegion(Uri imageUri, ImageRequest request, bool allowSizeAboveFull, TremendousIIIF.Common.Configuration.ImageQuality quality)
        {
            var sourceFormat = await GetSourceFormat(imageUri, request.RequestId);

            switch (sourceFormat)
            {
            case ImageFormat.jp2:
                return(J2KExpander.ExpandRegion(HttpClient, Log, imageUri, request, allowSizeAboveFull, quality));

            case ImageFormat.tif:
                return(TiffExpander.ExpandRegion(HttpClient, Log, imageUri, request, allowSizeAboveFull));

            default:
                throw new IOException("Unsupported source format");
            }
        }
        public void FullImage()
        {
            var filename = Path.GetFullPath(@"test_image.tif");
            var request  = new ImageRequest
                           (
                "",
                new ImageRegion(ImageRegionMode.Full),
                new ImageSize(ImageSizeMode.Full),
                new ImageRotation(0, false),
                ImageQuality.@default,
                ImageFormat.jpg
                           );

            (var state, var img) = TiffExpander.ExpandRegion(null, Log, new Uri(filename), request, false);

            Assert.IsNotNull(img, "Image is null");
            Assert.AreEqual(1000, img.Width, "Image width does not match expected width");
            Assert.AreEqual(1000, img.Height, "Image height does not match expected height");
        }
コード例 #11
0
        public void Setup()
        {
            var request = new ImageRequest("", new ImageRegion(ImageRegionMode.Full), new ImageSize(ImageSizeMode.Max, 1, 10, 10), new ImageRotation(0, false), ImageQuality.@default, ImageFormat.jpg);

            using (var tiff = T.Tiff.Open(@"C:\Jp2Cache\vdc_tiff", "r"))
            {
                int width  = tiff.GetField(T.TiffTag.IMAGEWIDTH)[0].ToInt();
                int height = tiff.GetField(T.TiffTag.IMAGELENGTH)[0].ToInt();

                var raster = new int[width * height];
                if (!tiff.ReadRGBAImageOriented(width, height, raster, T.Orientation.TOPLEFT))
                {
                    throw new IOException("Unable to decode TIFF file");
                }
                imageData   = raster;
                this.width  = width;
                this.height = height;
                imageAsBmp  = TiffExpander.CreateBitmapFromPixels(imageData, width, height);
                imageAsImg  = SKImage.FromBitmap(imageAsBmp);
            }
        }
コード例 #12
0
 public SKImage CopyImageRegion2() => TiffExpander.CopyImageRegion2(imageAsBmp, Width, Height, Region);
コード例 #13
0
 public SKImage CopyImageRegion() => TiffExpander.CopyImageRegion(imageAsImg, Width, Height, Region);
コード例 #14
0
 public SKImage CopyBitmapRegion() => TiffExpander.CopyBitmapRegion(imageAsBmp, Width, Height, Region);
コード例 #15
0
 public SKBitmap BmpFromPixels() => TiffExpander.CreateBitmapFromPixels(imageData, width, height);