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;
 }
Beispiel #8
0
        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);
        }