public void TestNormativeLeftBreastLateralView() { using (var dummy = new GrayscaleImageGraphic(10, 10)) { var standard = CreateTransform(dummy, "A", "F", "L", new Rectangle(0, 0, 20, 20)); AssertAreEqual(new PointF(0, 5), standard.ConvertToDestination(new PointF(0, 0)), "standard view"); AssertAreEqual(new PointF(0, 15), standard.ConvertToDestination(new PointF(0, 10)), "standard view"); AssertAreEqual(new PointF(10, 5), standard.ConvertToDestination(new PointF(10, 0)), "standard view"); var mirrored = CreateTransform(dummy, "P", "F", "L", new Rectangle(0, 0, 20, 20)); AssertAreEqual(new PointF(0, 5), mirrored.ConvertToDestination(new PointF(10, 0)), "mirrored view"); AssertAreEqual(new PointF(0, 15), mirrored.ConvertToDestination(new PointF(10, 10)), "mirrored view"); AssertAreEqual(new PointF(10, 5), mirrored.ConvertToDestination(new PointF(0, 0)), "mirrored view"); var flipped = CreateTransform(dummy, "A", "H", "L", new Rectangle(0, 0, 20, 20)); AssertAreEqual(new PointF(0, 5), flipped.ConvertToDestination(new PointF(0, 10)), "flipped view"); AssertAreEqual(new PointF(0, 15), flipped.ConvertToDestination(new PointF(0, 0)), "flipped view"); AssertAreEqual(new PointF(10, 5), flipped.ConvertToDestination(new PointF(10, 10)), "flipped view"); var rotated = CreateTransform(dummy, "H", "P", "L", new Rectangle(0, 0, 20, 20)); AssertAreEqual(new PointF(0, 5), rotated.ConvertToDestination(new PointF(10, 10)), "rotated view"); AssertAreEqual(new PointF(0, 15), rotated.ConvertToDestination(new PointF(0, 10)), "rotated view"); AssertAreEqual(new PointF(10, 5), rotated.ConvertToDestination(new PointF(10, 0)), "rotated view"); } }
public void TestDirectionalityAndLateralityInputErrorHandling() { using (var dummy = new GrayscaleImageGraphic(10, 10)) { var case1 = CreateTransform(dummy, "ALH", "FAPH", "LRRR", new Rectangle(0, 0, 20, 20)); AssertAreEqual(new PointF(0, 5), case1.ConvertToDestination(new PointF(0, 0)), "standard view"); AssertAreEqual(new PointF(0, 15), case1.ConvertToDestination(new PointF(0, 10)), "standard view"); AssertAreEqual(new PointF(10, 5), case1.ConvertToDestination(new PointF(10, 0)), "standard view"); var case2 = CreateTransform(dummy, "PAH", "RLRLR", "LHHH", new Rectangle(0, 0, 20, 20)); AssertAreEqual(new PointF(0, 5), case2.ConvertToDestination(new PointF(10, 0)), "mirrored view"); AssertAreEqual(new PointF(0, 15), case2.ConvertToDestination(new PointF(10, 10)), "mirrored view"); AssertAreEqual(new PointF(10, 5), case2.ConvertToDestination(new PointF(0, 0)), "mirrored view"); var case3 = CreateTransform(dummy, "PFL", "HAPF", "RCCC", new Rectangle(0, 0, 20, 20)); AssertAreEqual(new PointF(20, 5), case3.ConvertToDestination(new PointF(10, 10)), "flipped view"); AssertAreEqual(new PointF(20, 15), case3.ConvertToDestination(new PointF(10, 0)), "flipped view"); AssertAreEqual(new PointF(10, 5), case3.ConvertToDestination(new PointF(0, 10)), "flipped view"); var case4 = CreateTransform(dummy, "AFR", "LRDSFS", "RLLL", new Rectangle(0, 0, 20, 20)); AssertAreEqual(new PointF(20, 5), case4.ConvertToDestination(new PointF(0, 0)), "case4 view"); AssertAreEqual(new PointF(20, 15), case4.ConvertToDestination(new PointF(0, 10)), "case4 view"); AssertAreEqual(new PointF(10, 5), case4.ConvertToDestination(new PointF(10, 0)), "case4 view"); } }
public void TestBasicGrayscaleImage16() { const int rows = 8; const int cols = 8; var pixelData = new byte[rows*cols*2]; using (var imageGraphic = new GrayscaleImageGraphic(rows, cols, 16, 16, 15, false, false, 1, 0, () => pixelData)) using (var presentationImage = new TestPresentationImage(imageGraphic)) { presentationImage.DrawToBitmap(100, 100); } }
public void TestInvalidPixelDataGrayscaleImage8() { const int rows = 8; const int cols = 8; try { var badPixelData = new byte[rows*cols - 10]; using (var imageGraphic = new GrayscaleImageGraphic(rows, cols, 8, 8, 7, false, false, 1, 0, () => badPixelData)) using (var presentationImage = new TestPresentationImage(imageGraphic)) { presentationImage.DrawToBitmap(100, 100); } Assert.Fail("Expected RenderingException was not thrown"); } catch (RenderingException ex) { Trace.WriteLine(string.Format("Rendering exception thrown: {0}", ex.UserMessage)); } }
public void TestPosteriorEdgeAlignment() { using (var dummy = new GrayscaleImageGraphic(10, 10)) { var transform = CreateTransform(dummy, "A", "F", "L", new Rectangle(0, 0, 20, 20)); AssertAreEqual(new PointF(0, 10), transform.ConvertToDestination(new PointF(0, 5)), "alignment in unrotated/unflipped view"); transform.RotationXY = 90; AssertAreEqual(new PointF(10, 0), transform.ConvertToDestination(new PointF(0, 5)), "alignment with 90d rotation"); transform.RotationXY = 180; AssertAreEqual(new PointF(20, 10), transform.ConvertToDestination(new PointF(0, 5)), "alignment with 180d rotation"); transform.RotationXY = 270; AssertAreEqual(new PointF(10, 20), transform.ConvertToDestination(new PointF(0, 5)), "alignment with 270d rotation"); transform.RotationXY = 0; transform.FlipX = true; AssertAreEqual(new PointF(0, 10), transform.ConvertToDestination(new PointF(0, 5)), "alignment with flip"); transform.RotationXY = 90; AssertAreEqual(new PointF(10, 0), transform.ConvertToDestination(new PointF(0, 5)), "alignment with flip, 90d rotation"); transform.RotationXY = 180; AssertAreEqual(new PointF(20, 10), transform.ConvertToDestination(new PointF(0, 5)), "alignment with flip, 180d rotation"); transform.RotationXY = 270; AssertAreEqual(new PointF(10, 20), transform.ConvertToDestination(new PointF(0, 5)), "alignment with flip, 270d rotation"); } }
public void TestMaximumPracticalGrayscaleImage16() { if (Assert64Bit()) return; // due to the 2GB limit for a single buffer and the current ImageViewer rendering infrastructure, // it is not possible to render the largest possible valid-DICOM 16-bit grayscale image. // these values test the maximum renderable image under the current infrastructure assuming a 64-bit machine const int rows = (1 << 15) - 1; const int cols = (1 << 15); var pixelData = new byte[rows*cols*2]; using (var imageGraphic = new GrayscaleImageGraphic(rows, cols, 16, 16, 15, false, false, 1, 0, () => pixelData)) using (var presentationImage = new TestPresentationImage(imageGraphic)) { presentationImage.DrawToBitmap(100, 100); } }
private void HandleOverlayFrameDataUnloaded(object sender, EventArgs e) { OverlayImageGraphic = null; }
private void Probe(Point destinationPoint) { Point sourcePointRounded = Point.Truncate(_selectedImageGraphic.SpatialTransform.ConvertToSource(destinationPoint)); bool showPixelValue = true; bool showModalityValue = true; bool showVoiValue = true; string probeString = String.Format(SR.FormatLocation, SR.LabelNotApplicable, SR.LabelNotApplicable, SR.LabelNotApplicable); string pixelValueString = String.Format(SR.FormatPixelValue, SR.LabelNotApplicable); string modalityLutString = String.Format(SR.FormatModalityLutValue, SR.LabelNotApplicable); string voiLutString = String.Format(SR.FormatVoiLutValue, SR.LabelNotApplicable); try { DicomImagePlane dip = DicomImagePlane.FromImage(this.SelectedPresentationImage); if (_selectedImageGraphic.HitTest(destinationPoint)) { Vector3D voxelCoordinate = dip.ConvertToPatient(new PointF(sourcePointRounded.X, sourcePointRounded.Y)); probeString = String.Format(SR.FormatLocation, voxelCoordinate.X, voxelCoordinate.Y, voxelCoordinate.Z); if (_selectedImageGraphic is GrayscaleImageGraphic) { GrayscaleImageGraphic image = _selectedImageGraphic as GrayscaleImageGraphic; int pixelValue = 0; double modalityLutValue = 0; int voiLutValue = 0; GetPixelValue(image, sourcePointRounded, ref pixelValue, ref pixelValueString); GetModalityLutValue(image, pixelValue, ref modalityLutValue, ref modalityLutString); GetVoiLutValue(image, modalityLutValue, ref voiLutValue, ref voiLutString); } else if (_selectedImageGraphic is ColorImageGraphic) { showModalityValue = false; showVoiValue = false; ColorImageGraphic image = _selectedImageGraphic as ColorImageGraphic; Color color = image.PixelData.GetPixelAsColor(sourcePointRounded.X, sourcePointRounded.Y); string rgbFormatted = String.Format(SR.FormatRgb, color.R, color.G, color.B); pixelValueString = String.Format(SR.FormatPixelValue, rgbFormatted); } else { showPixelValue = false; showModalityValue = false; showVoiValue = false; } } if (showPixelValue) { probeString += "\n" + pixelValueString; } if (showModalityValue) { probeString += "\n" + modalityLutString; } if (showVoiValue) { probeString += "\n" + voiLutString; } } catch (Exception e) { Platform.Log(LogLevel.Error, e); probeString = SR.MessageProbeToolError; } _selectedTile.InformationBox.Update(probeString, destinationPoint); }