public override Image ReadRegion(LevelSize location, int level, LevelSize size) { if (level < 0) { throw new OpenSlideException("Invalid level"); } if (size.Width < 0 || size.Height < 0) { throw new OpenSlideException($"Size {size} must be non-negative"); } var bmp = new Bitmap((int)size.Width, (int)size.Height); var bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); var bmpPtr = bmpData.Scan0.ToPointer(); CheckDisposed(); OpenSlideDll.openslide_read_region(osr, bmpPtr, location.Width, location.Height, level, size.Width, size.Height); if (bmpPtr == null) { throw new OpenSlideException($"error reading region location:{location}, level:{level}, size:{size}"); } bmp.UnlockBits(bmpData); CheckError(); return(bmp); }
public void ReadLevelCount() { LevelCount = OpenSlideDll.openslide_get_level_count(osr); if (LevelCount == -1) { CheckError(); } }
public void CheckError() { var errorMessage = OpenSlideDll.openslide_get_error(osr); if (errorMessage.ToInt32() != 0) { throw new OpenSlideException($"openslide error: {Marshal.PtrToStringAnsi(errorMessage)}"); } }
private void CheckVendorIsValid(string fileName) { var vendor = OpenSlideDll.openslide_detect_vendor(fileName); if (vendor.ToInt32() != 0) { throw new OpenSlideUnsupportedFormatException($"Vendor {Marshal.PtrToStringAnsi(vendor)} unsupported"); } }
private void GetDownsampleAtLevel(int level) { var downsample = OpenSlideDll.openslide_get_level_downsample(osr, level); if (downsample == -1.0) { CheckError(); } LevelDownsamples.Add(downsample); }
private void GetDimensionsAtLevel(int level) { OpenSlideDll.openslide_get_level_dimensions(osr, level, out long width, out long height); if (width == -1 || height == -1) { CheckError(); } LevelDimensions.Add(new LevelSize(width, height)); }
protected virtual void Dispose(bool disposing) { if (disposed) { return; } if (disposing) { } if (osr != null && osr[0] != 0) { OpenSlideDll.openslide_close(osr); } disposed = true; }
private void ReadOpenSlide() { osr = OpenSlideDll.openslide_open(FileName); if (osr == null || osr[0] == 0) { CheckVendorIsValid(FileName); } // dispose on error, we are in the constructor try { CheckError(); } catch (OpenSlideException) { Close(); throw; } }
public Image ReadAssociatedImage(string name) { lock (slideLock) { CheckDisposed(); OpenSlideDll.openslide_get_associated_image_dimensions(osr, name, out long width, out long height); CheckError(); if (width == -1) { throw new OpenSlideException("Failure reading associated image"); } var bmp = new Bitmap((int)width, (int)height); var bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); var bmpPtr = bmpData.Scan0.ToPointer(); OpenSlideDll.openslide_read_associated_image(osr, name, bmpPtr); CheckError(); return(bmp); } }
public override string DetectFormat(string fileName) { return(Marshal.PtrToStringAnsi(OpenSlideDll.openslide_detect_vendor(fileName))); }
public string GetLibraryVersion() { return(Marshal.PtrToStringAnsi(OpenSlideDll.openslide_get_version())); }
private IEnumerable <string> GetAssociatedImageNames() { var imageNames = StringMarshaller.Marshal(OpenSlideDll.openslide_get_associated_image_names(osr)); return(imageNames); }
private string GetPropertyValue(string propertyName) { return(Marshal.PtrToStringAnsi(OpenSlideDll.openslide_get_property_value(osr, propertyName))); }
private IEnumerable <string> GetPropertyNames() { var propertyNames = StringMarshaller.Marshal(OpenSlideDll.openslide_get_property_names(osr)); return(propertyNames); }