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()); } } }
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); }
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; } }
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"); } }
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; } }
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"); }
/// <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"); } }
/// <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"); }
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); } }
public SKImage CopyImageRegion2() => TiffExpander.CopyImageRegion2(imageAsBmp, Width, Height, Region);
public SKImage CopyImageRegion() => TiffExpander.CopyImageRegion(imageAsImg, Width, Height, Region);
public SKImage CopyBitmapRegion() => TiffExpander.CopyBitmapRegion(imageAsBmp, Width, Height, Region);
public SKBitmap BmpFromPixels() => TiffExpander.CreateBitmapFromPixels(imageData, width, height);