示例#1
0
        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);
        }
示例#2
0
 public void ReadLevelCount()
 {
     LevelCount = OpenSlideDll.openslide_get_level_count(osr);
     if (LevelCount == -1)
     {
         CheckError();
     }
 }
示例#3
0
        public void CheckError()
        {
            var errorMessage = OpenSlideDll.openslide_get_error(osr);

            if (errorMessage.ToInt32() != 0)
            {
                throw new OpenSlideException($"openslide error: {Marshal.PtrToStringAnsi(errorMessage)}");
            }
        }
示例#4
0
        private void CheckVendorIsValid(string fileName)
        {
            var vendor = OpenSlideDll.openslide_detect_vendor(fileName);

            if (vendor.ToInt32() != 0)
            {
                throw new OpenSlideUnsupportedFormatException($"Vendor {Marshal.PtrToStringAnsi(vendor)} unsupported");
            }
        }
示例#5
0
        private void GetDownsampleAtLevel(int level)
        {
            var downsample = OpenSlideDll.openslide_get_level_downsample(osr, level);

            if (downsample == -1.0)
            {
                CheckError();
            }
            LevelDownsamples.Add(downsample);
        }
示例#6
0
        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));
        }
示例#7
0
        protected virtual void Dispose(bool disposing)
        {
            if (disposed)
            {
                return;
            }
            if (disposing)
            {
            }
            if (osr != null && osr[0] != 0)
            {
                OpenSlideDll.openslide_close(osr);
            }

            disposed = true;
        }
示例#8
0
 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;
     }
 }
示例#9
0
        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);
            }
        }
示例#10
0
 public override string DetectFormat(string fileName)
 {
     return(Marshal.PtrToStringAnsi(OpenSlideDll.openslide_detect_vendor(fileName)));
 }
示例#11
0
 public string GetLibraryVersion()
 {
     return(Marshal.PtrToStringAnsi(OpenSlideDll.openslide_get_version()));
 }
示例#12
0
        private IEnumerable <string> GetAssociatedImageNames()
        {
            var imageNames = StringMarshaller.Marshal(OpenSlideDll.openslide_get_associated_image_names(osr));

            return(imageNames);
        }
示例#13
0
 private string GetPropertyValue(string propertyName)
 {
     return(Marshal.PtrToStringAnsi(OpenSlideDll.openslide_get_property_value(osr, propertyName)));
 }
示例#14
0
        private IEnumerable <string> GetPropertyNames()
        {
            var propertyNames = StringMarshaller.Marshal(OpenSlideDll.openslide_get_property_names(osr));

            return(propertyNames);
        }