BioImager  3.9.1
A .NET microscopy imaging library. Supports various microscopes by using imported libraries & GUI automation. Supported libraries include Prior® & Zeiss® & all devices supported by Micromanager 2.0 and python-microscope.
Loading...
Searching...
No Matches
BioImager.SlideImager.Level Class Reference

Public Member Functions

void Init (double w, double h, PixelFormat pf, int index)
 
 Level (double w, double h, PixelFormat pf, int levels, Enums.ForeignTiffCompression comp, double physX, double physY)
 
 Level (double w, double h, PixelFormat pf)
 
void SaveLevel (string file)
 
void SaveLevels (string file)
 
void ImageLevel (int level)
 

Public Attributes

List< LevelLevels = new List<Level>()
 
List< Channel > Channels = new List<Channel>()
 

Properties

Level Parent = null [get, set]
 
Point3D Location [get, set]
 
List< BioImageBioImages = new List<BioImage>() [get, set]
 
int Objective [get, set]
 
double Focus [get, set]
 
NetVips.Image VipsImage [get, set]
 
PixelFormat PixelFormat [get, set]
 
double PhysicalX [get, set]
 
double PhysicalY [get, set]
 
AForge.Bitmap Image = null [get, set]
 
double Width [get, set]
 
double Height [get, set]
 
int Index [get, set]
 
double WidthPx [get]
 
double HeightPx [get]
 
Enums.ForeignTiffCompression Compression [get, set]
 
int CompressionLevel [get, set]
 

Detailed Description

Definition at line 48 of file SlideImager.cs.

Constructor & Destructor Documentation

◆ Level() [1/2]

BioImager.SlideImager.Level.Level ( double  w,
double  h,
PixelFormat  pf,
int  levels,
Enums.ForeignTiffCompression  comp,
double  physX,
double  physY 
)

Definition at line 85 of file SlideImager.cs.

86 {
87 PhysicalX = physX; PhysicalY = physY;
88 Compression = comp;
89 for (int i = 0; i < levels; i++)
90 {
91 Levels.Add(new Level(w, h, pf));
92 Levels[i].Parent = this;
93 }
94 }

◆ Level() [2/2]

BioImager.SlideImager.Level.Level ( double  w,
double  h,
PixelFormat  pf 
)

Definition at line 95 of file SlideImager.cs.

96 {
97 Width = w; Height = h; PixelFormat = pf;
98 }

Member Function Documentation

◆ ImageLevel()

void BioImager.SlideImager.Level.ImageLevel ( int  level)

Definition at line 200 of file SlideImager.cs.

201 {
202 Level l = Levels[level];
203 if (l.Image == null)
204 Init(l.Width, l.Height, l.PixelFormat, l.Index);
205 Microscope.SetPosition(new Point3D(l.Location.X, l.Location.Y, l.Focus));
206 Microscope.Objectives.SetPosition(l.Objective);
207 RectangleD r = Microscope.GetObjectiveViewRectangle();
208 int w = (int)Math.Ceiling(l.Width / r.W);
209 int h = (int)Math.Ceiling(l.Height / r.H);
210 count = w * h;
211 bool leftright = false;
212 for (int y = 0; y < h; y++)
213 {
214 for (int x = 0; x < w; x++)
215 {
216 Point3D pd = Microscope.GetPosition();
217 l.ImageTile(new PointD(pd.X, pd.Y),(w * h) - ((y * w) + x));
218 SlideImager.progress = (int)((double)((y * w) + x) / (double)(w * h));
219 if (leftright)
220 Microscope.MoveFieldLeft();
221 else
222 Microscope.MoveFieldRight();
223 }
224 Point3D p = Microscope.GetPosition();
225 l.ImageTile(new PointD(p.X, p.Y), (w * h) - ((y * w) + w));
226 leftright = !leftright;
227 Microscope.MoveFieldDown();
228 }
229 }

◆ Init()

void BioImager.SlideImager.Level.Init ( double  w,
double  h,
PixelFormat  pf,
int  index 
)

Definition at line 69 of file SlideImager.cs.

70 {
71 RectangleD r = Microscope.GetObjectiveViewRectangle();
72 int wi = (int)(w / r.W);
73 int hi = (int)(h / r.H);
74 double xx = 2 * index;
75 if(index==0)
76 Image = new AForge.Bitmap((int)(w / PhysicalX), (int)(h / PhysicalY), pf);
77 else
78 Image = new AForge.Bitmap((int)(w / PhysicalX / xx), (int)(h / PhysicalY / xx), pf);
79 int bands = BioImage.GetBands(pf);
80 if (Image.BitsPerPixel > 8)
81 VipsImage = NetVips.Image.NewFromMemory(Image.Data, (ulong)Image.Length, Image.Width, Image.Height, bands, Enums.BandFormat.Ushort);
82 else
83 VipsImage = NetVips.Image.NewFromMemory(Image.Data, (ulong)Image.Length, Image.Width, Image.Height, bands, Enums.BandFormat.Uchar);
84 }

◆ SaveLevel()

void BioImager.SlideImager.Level.SaveLevel ( string  file)

Definition at line 99 of file SlideImager.cs.

100 {
101 string met = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" +
102 "<OME xmlns=\"http://www.openmicroscopy.org/Schemas/OME/2016-06\" " +
103 "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
104 "xsi:schemaLocation=\"http://www.openmicroscopy.org/Schemas/OME/2016-06 http://www.openmicroscopy.org/Schemas/OME/2016-06/ome.xsd\">";
105 int c = Parent.Image.RGBChannelsCount;
106 string endian = Parent.Image.LittleEndian.ToString().ToLower();
107 int ib = 0;
108 met +=
109 "<Image ID=\"Image:" + ib + "\">" +
110 "<Pixels BigEndian=\"" + endian + "\" DimensionOrder= \"XYCZT\" ID= \"Pixels:0\" Interleaved=\"true\" " +
111 "PhysicalSizeX=\"" + PhysicalX + "\" PhysicalSizeXUnit=\"µm\" PhysicalSizeY=\"" + PhysicalY + "\" PhysicalSizeYUnit=\"µm\" SignificantBits=\"" + Parent.Image.BitsPerPixel + "\" " +
112 "SizeC = \"" + c + "\" SizeT = \"" + 1 + "\" SizeX =\"" + Parent.Image.Width +
113 "\" SizeY= \"" + Parent.Image.Height + "\" SizeZ=\"" + 1;
114 if (Parent.Image.BitsPerPixel > 8) met += "\" Type= \"uint16\">";
115 else met += "\" Type= \"uint8\">";
116 int i = 0;
117 foreach (Channel ch in Channels)
118 {
119 met += "<Channel ID=\"Channel:" + ib + ":" + i + "\" SamplesPerPixel=\"1\"></Channel>";
120 i++;
121 }
122 met += "</Pixels></Image></OME>";
123 A:
124 try
125 {
126 using var mutated = Parent.VipsImage.Mutate(mutable =>
127 {
128 // Set the ImageDescription tag
129 mutable.Set(GValue.GStrType, "image-description", met);
130 mutable.Set(GValue.GIntType, "page-height", Parent.Image.Height);
131 });
132 if (Parent.Image.BitsPerPixel > 8)
133 mutated.Tiffsave(file, Compression, 1, Enums.ForeignTiffPredictor.None, true, (int)512, (int)512, true, false, 16,
134 Enums.ForeignTiffResunit.Cm, 1000 * PhysicalX, 1000 * PhysicalY, true, null, Enums.RegionShrink.Nearest,
135 CompressionLevel, true, Enums.ForeignDzDepth.Onetile, true, false, null, null, (int)Parent.Image.Height);
136 else
137 mutated.Tiffsave(file, Compression, 1, Enums.ForeignTiffPredictor.None, true, (int)512, (int)512, true, false, 8,
138 Enums.ForeignTiffResunit.Cm, 1000 * PhysicalX, 1000 * PhysicalY, true, null, Enums.RegionShrink.Nearest,
139 CompressionLevel, true, Enums.ForeignDzDepth.Onetile, true, false, null, null, (int)Parent.Image.Height);
140 }
141 catch (Exception e)
142 {
143 Console.WriteLine(e.ToString());
144 goto A;
145 }
146
147
148 }

◆ SaveLevels()

void BioImager.SlideImager.Level.SaveLevels ( string  file)

Definition at line 149 of file SlideImager.cs.

150 {
151 string met = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" +
152 "<OME xmlns=\"http://www.openmicroscopy.org/Schemas/OME/2016-06\" " +
153 "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
154 "xsi:schemaLocation=\"http://www.openmicroscopy.org/Schemas/OME/2016-06 http://www.openmicroscopy.org/Schemas/OME/2016-06/ome.xsd\">";
155 int c = Image.RGBChannelsCount;
156 string endian = Image.LittleEndian.ToString().ToLower();
157 int ib = 0;
158 foreach (Level l in Levels)
159 {
160 met +=
161 "<Image ID=\"Image:" + ib + "\">" +
162 "<Pixels BigEndian=\"" + endian + "\" DimensionOrder= \"XYCZT\" ID= \"Pixels:0\" Interleaved=\"true\" " +
163 "PhysicalSizeX=\"" + PhysicalX + "\" PhysicalSizeXUnit=\"µm\" PhysicalSizeY=\"" + PhysicalY + "\" PhysicalSizeYUnit=\"µm\" SignificantBits=\"" + Image.BitsPerPixel + "\" " +
164 "SizeC = \"" + c + "\" SizeT = \"" + 1 + "\" SizeX =\"" + Image.Width +
165 "\" SizeY= \"" + Image.Height + "\" SizeZ=\"" + 1;
166 if (Image.BitsPerPixel > 8) met += "\" Type= \"uint16\">";
167 else met += "\" Type= \"uint8\">";
168 int i = 0;
169 foreach (Channel ch in l.Channels)
170 {
171 met += "<Channel ID=\"Channel:" + ib + ":" + i + "\" SamplesPerPixel=\"1\"></Channel>";
172 i++;
173 }
174 met += "</Pixels></Image>";
175 ib++;
176 }
177 met += "</OME>";
178 int li = 0;
179 foreach (Level l in Levels)
180 {
181 string fs = file.Replace(".ome.tif", "");
182 NetVips.Image im = NetVips.Image.NewFromFile(fs + "-" + li + "ome.tif");
183 using var mutated = im.Mutate(mutable =>
184 {
185 // Set the ImageDescription tag
186 mutable.Set(GValue.GStrType, "image-description", met);
187 mutable.Set(GValue.GIntType, "page-height", l.Height * l.PhysicalY);
188 });
189 if (l.Image.BitsPerPixel > 8)
190 mutated.Tiffsave(file, Compression, 1, Enums.ForeignTiffPredictor.None, true, (int)l.WidthPx, (int)l.HeightPx, true, false, 16,
191 Enums.ForeignTiffResunit.Cm, 1000 * l.PhysicalX, 1000 * l.PhysicalY, true, null, Enums.RegionShrink.Nearest,
192 CompressionLevel, true, Enums.ForeignDzDepth.One, true, false, null, null, (int)l.HeightPx);
193 else
194 mutated.Tiffsave(file, Compression, 1, Enums.ForeignTiffPredictor.None, true, (int)l.WidthPx, (int)l.HeightPx, true, false, 8,
195 Enums.ForeignTiffResunit.Cm, 1000 * l.PhysicalX, 1000 * l.PhysicalY, true, null, Enums.RegionShrink.Nearest,
196 CompressionLevel, true, Enums.ForeignDzDepth.One, true, false, null, null, (int)l.HeightPx);
197 li++;
198 }
199 }

Member Data Documentation

◆ Channels

List<Channel> BioImager.SlideImager.Level.Channels = new List<Channel>()

Definition at line 66 of file SlideImager.cs.

◆ Levels

List<Level> BioImager.SlideImager.Level.Levels = new List<Level>()

Definition at line 50 of file SlideImager.cs.

Property Documentation

◆ BioImages

List<BioImage> BioImager.SlideImager.Level.BioImages = new List<BioImage>()
getset

Definition at line 53 of file SlideImager.cs.

53{ get; set; } = new List<BioImage>();

◆ Compression

Enums.ForeignTiffCompression BioImager.SlideImager.Level.Compression
getset

Definition at line 67 of file SlideImager.cs.

67{ get; set; }

◆ CompressionLevel

int BioImager.SlideImager.Level.CompressionLevel
getset

Definition at line 68 of file SlideImager.cs.

68{ get; set; }

◆ Focus

double BioImager.SlideImager.Level.Focus
getset

Definition at line 55 of file SlideImager.cs.

55{ get; set; }

◆ Height

double BioImager.SlideImager.Level.Height
getset

Definition at line 62 of file SlideImager.cs.

62{ get; set; }

◆ HeightPx

double BioImager.SlideImager.Level.HeightPx
get

Definition at line 65 of file SlideImager.cs.

65{ get { return Height / PhysicalY; } }

◆ Image

AForge.Bitmap BioImager.SlideImager.Level.Image = null
getset

Definition at line 60 of file SlideImager.cs.

60{ get; set; } = null;

◆ Index

int BioImager.SlideImager.Level.Index
getset

Definition at line 63 of file SlideImager.cs.

63{ get; set; }

◆ Location

Point3D BioImager.SlideImager.Level.Location
getset

Definition at line 52 of file SlideImager.cs.

52{ get; set; }

◆ Objective

int BioImager.SlideImager.Level.Objective
getset

Definition at line 54 of file SlideImager.cs.

54{ get; set; }

◆ Parent

Level BioImager.SlideImager.Level.Parent = null
getset

Definition at line 51 of file SlideImager.cs.

51{ get; set; } = null;

◆ PhysicalX

double BioImager.SlideImager.Level.PhysicalX
getset

Definition at line 58 of file SlideImager.cs.

58{ get; set; }

◆ PhysicalY

double BioImager.SlideImager.Level.PhysicalY
getset

Definition at line 59 of file SlideImager.cs.

59{ get; set; }

◆ PixelFormat

PixelFormat BioImager.SlideImager.Level.PixelFormat
getset

Definition at line 57 of file SlideImager.cs.

57{ get; set; }

◆ VipsImage

NetVips.Image BioImager.SlideImager.Level.VipsImage
getset

Definition at line 56 of file SlideImager.cs.

56{ get; set; }

◆ Width

double BioImager.SlideImager.Level.Width
getset

Definition at line 61 of file SlideImager.cs.

61{ get; set; }

◆ WidthPx

double BioImager.SlideImager.Level.WidthPx
get

Definition at line 64 of file SlideImager.cs.

64{ get { return Width / PhysicalX; } }

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