public void TestRotationConstraints() { SynchronizationContext oldContext = SynchronizationContext.Current; if (oldContext == null) { SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); } try { CompositeGraphic sceneGraph = CreateTestSceneGraph(); CompositeImageGraphic imageComposite = (CompositeImageGraphic)sceneGraph.Graphics[0]; ImageGraphic image = (ImageGraphic)imageComposite.Graphics[0]; CompositeGraphic primitiveOwner = (CompositeGraphic)imageComposite.Graphics[1]; Graphic primitive = (Graphic)primitiveOwner.Graphics[0]; RoiGraphic roiGraphic = (RoiGraphic)imageComposite.Graphics[2]; try { sceneGraph.SpatialTransform.RotationXY = 90; imageComposite.SpatialTransform.RotationXY = 90; primitiveOwner.SpatialTransform.RotationXY = 10; primitive.SpatialTransform.RotationXY = -20; } catch (Exception) { Assert.Fail("These operations should not throw an exception!"); } Matrix cumulativeTransform; try { imageComposite.SpatialTransform.RotationXY = 30; //should throw; no non-90 degree rotations allowed on an image cumulativeTransform = image.SpatialTransform.CumulativeTransform; Assert.Fail("expected exception not thrown!"); } catch (ArgumentException) { imageComposite.SpatialTransform.RotationXY = 90; } roiGraphic.SpatialTransform.RotationXY = 100; //should throw; no rotation allowed on a roi cumulativeTransform = roiGraphic.SpatialTransform.CumulativeTransform; } finally { if (oldContext != SynchronizationContext.Current) { SynchronizationContext.SetSynchronizationContext(oldContext); } } }
/// <summary> /// Creates a spatial transform for a 384x512 image (i.e. 512 rows, 384 columns) with the specified pixel spacing and/or pixel aspect ratio. /// </summary> private static ImageSpatialTransform CreateTransform(double pixelSpacingX, double pixelSpacingY, double pixelAspectRatioX, double pixelAspectRatioY) { CompositeImageGraphic graphic = new CompositeImageGraphic(512, 384, pixelSpacingX, pixelSpacingY, pixelAspectRatioX, pixelAspectRatioY); GrayscaleImageGraphic image = new GrayscaleImageGraphic(512, 384); graphic.Graphics.Add(image); ImageSpatialTransform transform = (ImageSpatialTransform)graphic.SpatialTransform; transform.ClientRectangle = new Rectangle(0, 0, 384, 512); return(transform); }
/// <summary> /// Creates a spatial transform for a 384x512 image (i.e. 512 rows, 384 columns). /// </summary> private static ImageSpatialTransform CreateTransform() { CompositeImageGraphic graphic = new CompositeImageGraphic(512, 384); GrayscaleImageGraphic image = new GrayscaleImageGraphic(512, 384); graphic.Graphics.Add(image); ImageSpatialTransform transform = (ImageSpatialTransform)graphic.SpatialTransform; transform.ClientRectangle = new Rectangle(0, 0, 384, 512); return(transform); }
public void DestinationToSourceRoundtrip() { // be sure to covert back and forth CompositeImageGraphic graphic = new CompositeImageGraphic(3062, 3732); ImageSpatialTransform transform = (ImageSpatialTransform)graphic.SpatialTransform; transform.ClientRectangle = new Rectangle(6, 6, 493, 626); PointF dstPt1 = new Point(100, 200); PointF srcPt = transform.ConvertToSource(dstPt1); PointF dstPt2 = transform.ConvertToDestination(srcPt); Assert.IsTrue(FloatComparer.AreEqual(dstPt1, dstPt2)); }
private void CreateImageLayer(ImageTypes imageType) { if (imageType == ImageTypes.Mono16) { _image = new GrayscaleImageGraphic(_srcHeight, _srcWidth, 16, 16, 15, false, false, 1.9, 3, new byte[2 * _srcWidth * _srcHeight]); } else if (imageType == ImageTypes.Mono8) { _image = new GrayscaleImageGraphic(_srcHeight, _srcWidth, 8, 8, 7, false, false, 1.0, 0, new byte[_srcWidth * _srcHeight]); } if (imageType == ImageTypes.Mono16Signed) { _image = new GrayscaleImageGraphic(_srcHeight, _srcWidth, 16, 16, 15, true, false, 2.0, -630, new byte[2 * _srcWidth * _srcHeight]); } else if (imageType == ImageTypes.Mono8Signed) { _image = new GrayscaleImageGraphic(_srcHeight, _srcWidth, 8, 8, 7, true, false, 0.5, 4, new byte[_srcWidth * _srcHeight]); } else { _image = new ColorImageGraphic(_srcHeight, _srcWidth, new byte[4 * _srcWidth * _srcHeight]); } if (_image is GrayscaleImageGraphic) { (_image as IColorMapInstaller).InstallColorMap(new GrayscaleColorMap()); } _containerGraphic = new CompositeImageGraphic(_image.Rows, _image.Columns); _containerGraphic.Graphics.Add(_image); ImageSpatialTransform transform = (ImageSpatialTransform)_containerGraphic.SpatialTransform; transform.Initialize(); transform.ClientRectangle = new Rectangle(0, 0, _dstWidth, _dstHeight); transform.ScaleToFit = _scaleToFit; transform.Scale = _scale; transform.FlipX = _flipHorizontal; transform.FlipY = _flipVertical; transform.RotationXY = _rotation; transform.TranslationX = _translationX; transform.TranslationY = _translationY; }
public void CumulativeTransform() { //this will cause a non-1:1 scale in y CompositeImageGraphic composite = new CompositeImageGraphic(512, 384, 0, 0, 3, 4); ImageSpatialTransform transform = (ImageSpatialTransform)composite.SpatialTransform; transform.ClientRectangle = new Rectangle(0, 0, 384, 512); transform.ScaleToFit = false; transform.Scale = 2; CompositeGraphic graphic = new CompositeGraphic(); composite.Graphics.Add(graphic); graphic.SpatialTransform.RotationXY = 30; Assert.AreEqual(graphic.SpatialTransform.Transform.Elements[0], 0.8660, 0.0001F); Assert.AreEqual(graphic.SpatialTransform.Transform.Elements[1], 0.5, 0.0001F); Assert.AreEqual(graphic.SpatialTransform.Transform.Elements[2], -0.5, 0.0001F); Assert.AreEqual(graphic.SpatialTransform.Transform.Elements[3], 0.866, 0.0001F); Assert.AreEqual(graphic.SpatialTransform.CumulativeTransform.Elements[0], 1.7321, 0.0001F); Assert.AreEqual(graphic.SpatialTransform.CumulativeTransform.Elements[1], 1.3333, 0.0001F); Assert.AreEqual(graphic.SpatialTransform.CumulativeTransform.Elements[2], -1, 0.0001F); Assert.AreEqual(graphic.SpatialTransform.CumulativeTransform.Elements[3], 2.3094, 0.0001F); }