1202 {
1203 try
1204 {
1205 var gateway =
OMERO.gateway;
1206 var roiService = gateway.getFacility(typeof(ROIFacility)) as ROIFacility;
1207 var browse = gateway.getFacility(typeof(BrowseFacility)) as BrowseFacility;
1209 ImageData image = browse.getImage(ctx, imageId);
1210 int count = 0;
1211 ROI[] rois = b.Annotations.ToArray();
1212
1213 foreach (
ROI an
in rois)
1214 {
1215 ROIData roi = new ROIData();
1216 ShapeData shape = null;
1217
1218 switch (an.type)
1219 {
1220 case ROI.Type.Point:
1221 {
1222 var pt = new omero.gateway.model.PointData(
1223 b.ToImageSpaceX(an.X),
1224 b.ToImageSpaceY(an.Y)
1225 );
1226 pt.setZ(an.coord.Z);
1227 pt.setC(an.coord.C);
1228 pt.setT(an.coord.T);
1229 pt.setText(string.IsNullOrEmpty(an.Text) ? an.id : an.Text);
1230 shape = pt;
1231 break;
1232 }
1233
1234 case ROI.Type.Rectangle:
1235 {
1236 var r = new RectangleData(
1237 b.ToImageSpaceX(an.BoundingBox.X),
1238 b.ToImageSpaceY(an.BoundingBox.Y),
1239 b.ToImageSizeX(an.W),
1240 b.ToImageSizeY(an.H)
1241 );
1242 r.setZ(an.coord.Z);
1243 r.setC(an.coord.C);
1244 r.setT(an.coord.T);
1245 r.setText(string.IsNullOrEmpty(an.Text) ? an.id : an.Text);
1246 shape = r;
1247 break;
1248 }
1249
1250 case ROI.Type.Ellipse:
1251 {
1252 double rx = b.ToImageSizeX(an.W / 2.0);
1253 double ry = b.ToImageSizeY(an.H / 2.0);
1254 double cx = b.ToImageSpaceX(an.Points[0].X + an.W / 2.0);
1255 double cy = b.ToImageSpaceY(an.Points[0].Y + an.H / 2.0);
1256
1257 var e = new EllipseData(cx, cy, rx, ry);
1258 e.setZ(an.coord.Z);
1259 e.setC(an.coord.C);
1260 e.setT(an.coord.T);
1261 e.setText(string.IsNullOrEmpty(an.Text) ? an.id : an.Text);
1262 shape = e;
1263 break;
1264 }
1265
1267 {
1268 var l = new LineData(
1273 );
1274 l.setZ(an.coord.Z);
1275 l.setC(an.coord.C);
1276 l.setT(an.coord.T);
1277 l.setText(string.IsNullOrEmpty(an.Text) ? an.id : an.Text);
1278 shape = l;
1279 break;
1280 }
1281
1282 case ROI.Type.Polygon:
1283 case ROI.Type.Freeform:
1284 {
1285 var pts = new List<PointD>();
1286 foreach (var p in an.Points)
1287 pts.Add(new PointD(
1288 b.ToImageSpaceX(p.X),
1289 b.ToImageSpaceY(p.Y)
1290 ));
1291
1292 var poly = new PolygonData(BioPointToOmeroPoint(an,b));
1293 poly.setZ(an.coord.Z);
1294 poly.setC(an.coord.C);
1295 poly.setT(an.coord.T);
1296 poly.setText(string.IsNullOrEmpty(an.Text) ? an.id : an.Text);
1297 shape = poly;
1298 break;
1299 }
1300
1301 case ROI.Type.Polyline:
1302 {
1303 var pts = new List<PointD>();
1304 foreach (var p in an.Points)
1305 pts.Add(new PointD(
1306 b.ToImageSpaceX(p.X),
1307 b.ToImageSpaceY(p.Y)
1308 ));
1309
1310 var pl = new PolylineData(BioPointToOmeroPoint(an, b));
1311 pl.setZ(an.coord.Z);
1312 pl.setC(an.coord.C);
1313 pl.setT(an.coord.T);
1314 pl.setText(string.IsNullOrEmpty(an.Text) ? an.id : an.Text);
1315 shape = pl;
1316 break;
1317 }
1318
1319 case ROI.Type.Label:
1320 {
1321 var t = new TextData(
1322 string.IsNullOrEmpty(an.Text) ? "Label" : an.Text,
1323 b.ToImageSpaceX(an.BoundingBox.X),
1324 b.ToImageSpaceY(an.BoundingBox.Y)
1325 );
1326
1327 t.setZ(an.coord.Z);
1328 t.setC(an.coord.C);
1329 t.setT(an.coord.T);
1330 shape = t;
1331 break;
1332 }
1333
1335 {
1336 if (an.roiMask == null)
1337 continue;
1338
1339 var m = new MaskData(
1340 an.roiMask.X,
1341 an.roiMask.Y,
1342 an.roiMask.Width,
1343 an.roiMask.Height,
1344 an.roiMask.GetBytes()
1345 );
1346
1347 m.setZ(an.coord.Z);
1348 m.setC(an.coord.C);
1349 m.setT(an.coord.T);
1350 m.setText(string.IsNullOrEmpty(an.Text) ? an.id : an.Text);
1351 shape = m;
1352 break;
1353 }
1354 }
1355
1356 if (shape == null)
1357 continue;
1358
1359 shape.getShapeSettings().setStroke(new java.awt.Color(
1360 an.strokeColor.A,
1361 an.strokeColor.R,
1362 an.strokeColor.G,
1363 an.strokeColor.B
1364 ));
1365
1366 shape.getShapeSettings().setFill(new java.awt.Color(
1367 an.fillColor.A,
1368 an.fillColor.R,
1369 an.fillColor.G,
1370 an.fillColor.B
1371 ));
1372
1373 shape.getShapeSettings().setStrokeWidth(
1374 new omero.model.LengthI(an.strokeWidth, omero.model.enums.UnitsLength.PIXEL)
1375 );
1376
1377 roi.addShapeData(shape);
1378
1379
1380 java.util.List roiList = new java.util.ArrayList();
1381 roiList.add(roi);
1382
1383 var saved = roiService.saveROIs(ctx, imageId, user, roiList);
1384 count++;
1385
1386 }
1387
1388 Console.WriteLine($"Added {count} ROIs to OMERO image {imageId}");
1389 return count;
1390 }
1391 catch (Exception ex)
1392 {
1393 Console.WriteLine("Error adding ROIs: " + ex);
1394 return 0;
1395 }
1396 }
PointD GetPoint(int i)
Definition ROI.cs:1605