BioImager  4.9.0
A .NET microscopy imaging application based on Bio library. Supports various microscopes by using imported libraries & GUI automation. Supports XInput game controllers to move stage, take images, run ImageJ macros on images or Bio C# scripts.
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< BioImage > BioImages = 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 46 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 83 of file SlideImager.cs.

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

◆ Level() [2/2]

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

Definition at line 93 of file SlideImager.cs.

94 {
95 Width = w; Height = h; PixelFormat = pf;
96 }

Member Function Documentation

◆ ImageLevel()

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

Definition at line 198 of file SlideImager.cs.

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

◆ Init()

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

Definition at line 67 of file SlideImager.cs.

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

◆ SaveLevel()

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

Definition at line 97 of file SlideImager.cs.

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

◆ SaveLevels()

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

Definition at line 147 of file SlideImager.cs.

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

Member Data Documentation

◆ Channels

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

Definition at line 64 of file SlideImager.cs.

◆ Levels

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

Definition at line 48 of file SlideImager.cs.

Property Documentation

◆ BioImages

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

Definition at line 51 of file SlideImager.cs.

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

◆ Compression

Enums.ForeignTiffCompression BioImager.SlideImager.Level.Compression
getset

Definition at line 65 of file SlideImager.cs.

65{ get; set; }

◆ CompressionLevel

int BioImager.SlideImager.Level.CompressionLevel
getset

Definition at line 66 of file SlideImager.cs.

66{ get; set; }

◆ Focus

double BioImager.SlideImager.Level.Focus
getset

Definition at line 53 of file SlideImager.cs.

53{ get; set; }

◆ Height

double BioImager.SlideImager.Level.Height
getset

Definition at line 60 of file SlideImager.cs.

60{ get; set; }

◆ HeightPx

double BioImager.SlideImager.Level.HeightPx
get

Definition at line 63 of file SlideImager.cs.

63{ get { return Height / PhysicalY; } }

◆ Image

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

Definition at line 58 of file SlideImager.cs.

58{ get; set; } = null;

◆ Index

int BioImager.SlideImager.Level.Index
getset

Definition at line 61 of file SlideImager.cs.

61{ get; set; }

◆ Location

Point3D BioImager.SlideImager.Level.Location
getset

Definition at line 50 of file SlideImager.cs.

50{ get; set; }

◆ Objective

int BioImager.SlideImager.Level.Objective
getset

Definition at line 52 of file SlideImager.cs.

52{ get; set; }

◆ Parent

Level BioImager.SlideImager.Level.Parent = null
getset

Definition at line 49 of file SlideImager.cs.

49{ get; set; } = null;

◆ PhysicalX

double BioImager.SlideImager.Level.PhysicalX
getset

Definition at line 56 of file SlideImager.cs.

56{ get; set; }

◆ PhysicalY

double BioImager.SlideImager.Level.PhysicalY
getset

Definition at line 57 of file SlideImager.cs.

57{ get; set; }

◆ PixelFormat

PixelFormat BioImager.SlideImager.Level.PixelFormat
getset

Definition at line 55 of file SlideImager.cs.

55{ get; set; }

◆ VipsImage

NetVips.Image BioImager.SlideImager.Level.VipsImage
getset

Definition at line 54 of file SlideImager.cs.

54{ get; set; }

◆ Width

double BioImager.SlideImager.Level.Width
getset

Definition at line 59 of file SlideImager.cs.

59{ get; set; }

◆ WidthPx

double BioImager.SlideImager.Level.WidthPx
get

Definition at line 62 of file SlideImager.cs.

62{ get { return Width / PhysicalX; } }

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