BioLib  4.1.1
A GUI-less version of Bio .NET library for editing & annotating various microscopy image formats.
Loading...
Searching...
No Matches
BioLib.SlideImage Class Reference

openslide wrapper More...

Inheritance diagram for BioLib.SlideImage:

Public Member Functions

 SlideImage ()
 
ImageDimension GetLevelDimension (int level)
 
IEnumerable< ImageDimension > GetLevelDimensions ()
 Get all level dimensions.
 
void ResetDimensionsCache ()
 Clears the cached level-0 dimensions so Dimensions is re-derived from the active well field on the next access. Call this whenever BioImage.WellIndex changes for a well image.
 
unsafe byte[] ReadRegion (int level, ZCT zct, long x, long y, long width, long height)
 Copy pre-multiplied BGRA data from a whole slide image.
 
bool TryReadRegion (int level, long x, long y, long width, long height, out byte[] data, ZCT zct)
 Copy pre-multiplied BGRA data from a whole slide image.
 
async Task< byte[]> TryReadRegionAsync (int level, long x, long y, long width, long height, ZCT zct, CancellationToken ct=default)
 Copy pre-multiplied BGRA data from a whole slide image.
 
void Close ()
 
void Dispose ()
 
async Task< byte[]> ReadRegionAsync (int level, long curLevelOffsetXPixel, long curLevelOffsetYPixel, int curTileWidth, int curTileHeight, ZCT coord, CancellationToken ct=default)
 

Static Public Member Functions

static string DetectVendor (string filename)
 Quickly determine whether a whole slide image is recognized.
 
static void Initialize (string path=null)
 Add .dll directory to PATH.
 
static SlideImage Open (BioImage b)
 Open.
 
static double CalculateBaseFactor (int originalResolution, int lastLevelResolution, int totalLevels)
 Calculates the base downsampling factor between two levels of a slide.
 
static List< double > GetLevelDownsamples (double baseDownsampleFactor, int totalLevels)
 Calculates the downsample factors for each level of a slide.
 

Protected Member Functions

virtual void Dispose (bool disposing)
 Dispose.
 

Properties

BioImage BioImage [get, set]
 
int LevelCount [get]
 Get the number of levels in the whole slide image.
 
ImageDimension Dimensions [get]
 

Detailed Description

openslide wrapper

Constructor & Destructor Documentation

◆ SlideImage()

BioLib.SlideImage.SlideImage ( )
Parameters
handle
isOwnerclose handle when disposed
Exceptions
OpenSlideException
82 {
83
84 }

Member Function Documentation

◆ CalculateBaseFactor()

static double BioLib.SlideImage.CalculateBaseFactor ( int originalResolution,
int lastLevelResolution,
int totalLevels )
static

Calculates the base downsampling factor between two levels of a slide.

Parameters
originalDimensionThe dimension (width or height) of the original level.
nextLevelDimensionThe dimension (width or height) of the next level.
Returns
The base downsampling factor.
209 {
210 if (totalLevels <= 1)
211 {
212 throw new ArgumentException("Total levels must be greater than 1 to calculate a base factor.");
213 }
214 if (lastLevelResolution <= 0 || originalResolution <= 0)
215 {
216 throw new ArgumentException("Resolutions must be greater than 0.");
217 }
218
219 // Calculate the base downsampling factor
220 double baseFactor = Math.Pow((double)originalResolution / lastLevelResolution, 1.0 / (totalLevels - 1));
221 return baseFactor;
222 }

◆ Close()

void BioLib.SlideImage.Close ( )
617 {
618
619 }

◆ DetectVendor()

static string BioLib.SlideImage.DetectVendor ( string filename)
static

Quickly determine whether a whole slide image is recognized.

If OpenSlide recognizes the file referenced by filename , return a string identifying the slide format vendor.This is equivalent to the value of the NativeMethods.VENDOR property. Calling Open(string) on this file will return a valid OpenSlide object or an OpenSlide object in error state.

Otherwise, return null.Calling Open(string) on this file will also return null.

Parameters
filenameThe filename to check. On Windows, this must be in UTF-8.
Returns
An identification of the format vendor for this file, or NULL.
72 {
73 return filename;
74 }

◆ Dispose() [1/2]

void BioLib.SlideImage.Dispose ( )
652 {
653 Dispose(disposing: true);
654 GC.SuppressFinalize(this);
655 }
virtual void Dispose(bool disposing)
Dispose.
Definition SlideImage.cs:629

◆ Dispose() [2/2]

virtual void BioLib.SlideImage.Dispose ( bool disposing)
protectedvirtual

Dispose.

Parameters
disposing
630 {
631 if (!disposedValue)
632 {
633 if (disposing)
634 {
635 }
636
637 Close();
638 disposedValue = true;
639 }
640 }

◆ GetLevelDimension()

ImageDimension BioLib.SlideImage.GetLevelDimension ( int level)
155 {
156 // For well-plate fields, derive dimensions from the field's pyramid shape.
157 if (BioImage.Type == BioImage.ImageType.well &&
158 BioImage.ZarrWellLevels?.Count > 0)
159 {
160 int fi = Math.Clamp(BioImage.WellIndex, 0, BioImage.ZarrWellLevels.Count - 1);
161 var fieldLevels = BioImage.ZarrWellLevels[fi];
162 if (fieldLevels != null && fieldLevels.Count > 0)
163 {
164 int lev = Math.Clamp(level, 0, fieldLevels.Count - 1);
165 var shape = fieldLevels[lev].Shape;
166 var axes = fieldLevels[lev].EffectiveAxes;
167 int w = 1, h = 1;
168 for (int i = 0; i < axes.Length; i++)
169 {
170 switch (axes[i].Name.ToLowerInvariant())
171 {
172 case "x": w = (int)shape[i]; break;
173 case "y": h = (int)shape[i]; break;
174 }
175 }
176 return new ImageDimension(w, h);
177 }
178 }
179 return new ImageDimension(BioImage.Resolutions[level].SizeX, BioImage.Resolutions[level].SizeY);
180 }

◆ GetLevelDimensions()

IEnumerable< ImageDimension > BioLib.SlideImage.GetLevelDimensions ( )

Get all level dimensions.

Returns
Exceptions
OpenSlideException
188 {
189 var count = LevelCount;
190 for (int i = 0; i < count; i++)
191 {
192 yield return GetLevelDimension(i);
193 }
194 }
int LevelCount
Get the number of levels in the whole slide image.
Definition SlideImage.cs:119

◆ GetLevelDownsamples()

static List< double > BioLib.SlideImage.GetLevelDownsamples ( double baseDownsampleFactor,
int totalLevels )
static

Calculates the downsample factors for each level of a slide.

Parameters
baseDownsampleFactorThe downsample factor between each level.
totalLevelsTotal number of levels in the slide.
Returns
A list of downsample factors for each level.
231 {
232 var levelDownsamples = new List<double>();
233
234 for (int level = 0; level < totalLevels; level++)
235 {
236 // Calculate the downsample factor for the current level.
237 // Math.Pow is used to raise the baseDownsampleFactor to the power of the level.
238 double downsampleFactorAtLevel = Math.Pow(baseDownsampleFactor, level);
239 levelDownsamples.Add(downsampleFactorAtLevel);
240 }
241
242 return levelDownsamples;
243 }

◆ Initialize()

static void BioLib.SlideImage.Initialize ( string path = null)
static

Add .dll directory to PATH.

Parameters
path
Exceptions
OpenSlideException
92 {
93
94 }

◆ Open()

static SlideImage BioLib.SlideImage.Open ( BioImage b)
static

Open.

Parameters
filename
Returns
Exceptions
OpenSlideException
107 {
108 SlideImage im = new SlideImage();
109 im.BioImage = b;
110 return im;
111 }
SlideImage()
Definition SlideImage.cs:81

◆ ReadRegion()

unsafe byte[] BioLib.SlideImage.ReadRegion ( int level,
ZCT zct,
long x,
long y,
long width,
long height )

Copy pre-multiplied BGRA data from a whole slide image.

Parameters
levelThe desired level.
xThe top left x-coordinate, in the level 0 reference frame.
yThe top left y-coordinate, in the level 0 reference frame.
widthThe width of the region. Must be non-negative.
heightThe height of the region. Must be non-negative.
Returns
The pixel data of this region.
Exceptions
ArgumentOutOfRangeException
Exceptions
OpenSlideException
283 {
284 try
285 {
286 var tile = BioImage.GetTile(
287 BioImage.GetFrameIndex(zct.Z, zct.C, zct.T),
288 level,
289 (int)x,
290 (int)y,
291 (int)width,
292 (int)height).Result;
293 if (tile == null)
294 return null;
295
296 var bytes = tile.Bytes;
297 tile.Dispose();
298 return bytes;
299 }
300 catch (Exception e)
301 {
302 if (BioImage == null)
303 Console.WriteLine("BioImage is null. ");
304 Console.WriteLine(e.Message + " " + e.StackTrace);
305 }
306 return null;
307 }

◆ ReadRegionAsync()

async Task< byte[]> BioLib.SlideImage.ReadRegionAsync ( int level,
long curLevelOffsetXPixel,
long curLevelOffsetYPixel,
int curTileWidth,
int curTileHeight,
ZCT coord,
CancellationToken ct = default )
658 {
659 try
660 {
661 byte[] bts = await TryReadRegionAsync(level, curLevelOffsetXPixel, curLevelOffsetYPixel, curTileWidth, curTileHeight, coord, ct);
662 return bts;
663 }
664 catch (Exception e)
665 {
666 return null;
667 }
668 }
async Task< byte[]> TryReadRegionAsync(int level, long x, long y, long width, long height, ZCT zct, CancellationToken ct=default)
Copy pre-multiplied BGRA data from a whole slide image.
Definition SlideImage.cs:352

◆ TryReadRegion()

bool BioLib.SlideImage.TryReadRegion ( int level,
long x,
long y,
long width,
long height,
out byte[] data,
ZCT zct )

Copy pre-multiplied BGRA data from a whole slide image.

Parameters
levelThe desired level.
xThe top left x-coordinate, in the level 0 reference frame.
yThe top left y-coordinate, in the level 0 reference frame.
widthThe width of the region. Must be non-negative.
heightThe height of the region. Must be non-negative.
dataThe BGRA pixel data of this region.
Returns
320 {
321 var tile = BioImage.GetTile(
322 BioImage.GetFrameIndex(zct.Z, zct.C, zct.T),
323 level,
324 (int)x,
325 (int)y,
326 (int)width,
327 (int)height).Result;
328 if (tile == null)
329 {
330 data = null;
331 return false;
332 }
333
334 data = tile.Bytes;
335 tile.Dispose();
336 if (data == null)
337 return false;
338 else
339 return true;
340 }

◆ TryReadRegionAsync()

async Task< byte[]> BioLib.SlideImage.TryReadRegionAsync ( int level,
long x,
long y,
long width,
long height,
ZCT zct,
CancellationToken ct = default )

Copy pre-multiplied BGRA data from a whole slide image.

Parameters
levelThe desired level.
xThe top left x-coordinate, in the level 0 reference frame.
yThe top left y-coordinate, in the level 0 reference frame.
widthThe width of the region. Must be non-negative.
heightThe height of the region. Must be non-negative.
dataThe BGRA pixel data of this region.
Returns

summary> Close an OpenSlide object. /summary> remarks> No other threads may be using the object. After this call returns, the object cannot be used anymore. /remarks>

Property Documentation

◆ BioImage

BioImage BioLib.SlideImage.BioImage
getset
25{ get; set; }

◆ Dimensions

ImageDimension BioLib.SlideImage.Dimensions
get
139 {
140 get
141 {
142 if (_dimensionsRef == null)
143 {
144 lock (_dimensionsSynclock)
145 {
146 if (_dimensionsRef == null)
147 _dimensionsRef = GetLevelDimension(0);
148 }
149 }
150 return _dimensionsRef.Value;
151 }
152 }

◆ LevelCount

int BioLib.SlideImage.LevelCount
get

Get the number of levels in the whole slide image.

<return>The number of levels, or -1 if an error occurred.</return>

Exceptions
OpenSlideException
119 {
120 get
121 {
122 // For well-plate fields use the active field's pyramid level count.
123 if (BioImage.Type == BioImage.ImageType.well &&
124 BioImage.ZarrWellLevels?.Count > 0)
125 {
126 int fi = Math.Clamp(BioImage.WellIndex, 0, BioImage.ZarrWellLevels.Count - 1);
127 return BioImage.ZarrWellLevels[fi]?.Count ?? 1;
128 }
129 if (BioImage.MacroResolution.HasValue)
130 return BioImage.Resolutions.Count - 2;
131 return BioImage.Resolutions.Count;
132 }
133 }

The documentation for this class was generated from the following file: