/// <summary> /// Constructs a new user-created <see cref="OverlayPlaneGraphic"/> with the specified dimensions. /// </summary> /// <param name="rows">The number of rows in the overlay.</param> /// <param name="columns">The number of columns in the overlay.</param> protected OverlayPlaneGraphic(int rows, int columns) { Platform.CheckPositive(rows, "rows"); Platform.CheckPositive(columns, "columns"); _index = -1; _frameIndex = 0; _label = string.Empty; _description = string.Empty; _type = OverlayType.G; _subtype = null; _source = OverlayPlaneSource.User; _overlayGraphic = new GrayscaleImageGraphic( rows, columns, // the reported overlay dimensions 8, // bits allocated is always 8 8, // overlays always have bit depth of 1, but we upconverted the data 7, // the high bit is now 7 after upconverting false, false, // overlays aren't signed and don't get inverted 1, 0, // overlays have no rescale MemoryManager.Allocate <byte>(rows * columns)); // new empty pixel buffer this.Color = System.Drawing.Color.PeachPuff; base.Graphics.Add(_overlayGraphic); }
/// <summary> /// Constructs an <see cref="OverlayPlaneGraphic"/> for a single or multi-frame overlay plane using a pre-processed overlay pixel data buffer. /// </summary> /// <remarks> /// <para> /// The <paramref name="overlayPixelData"/> parameter allows for the specification of an alternate source of overlay pixel data, such /// as the unpacked contents of <see cref="DicomTags.OverlayData"/> or the extracted, inflated overlay pixels of <see cref="DicomTags.PixelData"/>. /// Although the format should be 8-bits per pixel, every pixel should either be 0 or 255. This will allow pixel interpolation algorithms /// sufficient range to produce a pleasant image. (If the data was either 0 or 1, regardless of the bit-depth, most interpolation algorithms /// will interpolate 0s for everything in between!) /// </para> /// </remarks> /// <param name="overlayPlaneIod">The IOD object containing properties of the overlay plane.</param> /// <param name="overlayPixelData">The overlay pixel data in 8-bits per pixel format, with each pixel being either 0 or 255.</param> /// <param name="frameIndex">The overlay frame index (0-based). Single-frame overlays should specify 0.</param> /// <param name="source">A value identifying the source of the overlay plane.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="overlayPixelData"/> is NULL or 0-length.</exception> public OverlayPlaneGraphic(OverlayPlane overlayPlaneIod, byte[] overlayPixelData, int frameIndex, OverlayPlaneSource source) { Platform.CheckNonNegative(frameIndex, "frameIndex"); _frameIndex = frameIndex; _index = overlayPlaneIod.Index; _label = overlayPlaneIod.OverlayLabel; _description = overlayPlaneIod.OverlayDescription; _type = overlayPlaneIod.OverlayType; _subtype = (OverlayPlaneSubtype)overlayPlaneIod.OverlaySubtype; _source = source; GrayscaleImageGraphic overlayImageGraphic = CreateOverlayImageGraphic(overlayPlaneIod, overlayPixelData); if (overlayImageGraphic != null) { _overlayGraphic = overlayImageGraphic; this.Color = System.Drawing.Color.PeachPuff; base.Graphics.Add(overlayImageGraphic); } if (string.IsNullOrEmpty(overlayPlaneIod.OverlayLabel)) { if (overlayPlaneIod.IsMultiFrame) { base.Name = string.Format(SR.FormatDefaultMultiFrameOverlayGraphicName, _source, _index, frameIndex); } else { base.Name = string.Format(SR.FormatDefaultSingleFrameOverlayGraphicName, _source, _index, frameIndex); } } else { base.Name = overlayPlaneIod.OverlayLabel; } }
/// <summary> /// Constructs an <see cref="OverlayPlaneGraphic"/> for a single or multi-frame overlay plane using a pre-processed overlay pixel data buffer. /// </summary> /// <remarks> /// <para> /// The <paramref name="overlayPixelData"/> parameter allows for the specification of an alternate source of overlay pixel data, such /// as the unpacked contents of <see cref="DicomTags.OverlayData"/> or the extracted, inflated overlay pixels of <see cref="DicomTags.PixelData"/>. /// Although the format should be 8-bits per pixel, every pixel should either be 0 or 255. This will allow pixel interpolation algorithms /// sufficient range to produce a pleasant image. (If the data was either 0 or 1, regardless of the bit-depth, most interpolation algorithms /// will interpolate 0s for everything in between!) /// </para> /// </remarks> /// <param name="overlayPlaneIod">The IOD object containing properties of the overlay plane.</param> /// <param name="overlayPixelData">The overlay pixel data in 8-bits per pixel format, with each pixel being either 0 or 255.</param> /// <param name="frameIndex">The overlay frame index (0-based). Single-frame overlays should specify 0.</param> /// <param name="source">A value identifying the source of the overlay plane.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="overlayPixelData"/> is NULL or 0-length.</exception> public OverlayPlaneGraphic(OverlayPlane overlayPlaneIod, byte[] overlayPixelData, int frameIndex, OverlayPlaneSource source) { Platform.CheckNonNegative(frameIndex, "frameIndex"); _frameIndex = frameIndex; _index = overlayPlaneIod.Index; _label = overlayPlaneIod.OverlayLabel; _description = overlayPlaneIod.OverlayDescription; _type = overlayPlaneIod.OverlayType; _subtype = (OverlayPlaneSubtype) overlayPlaneIod.OverlaySubtype; _source = source; GrayscaleImageGraphic overlayImageGraphic = CreateOverlayImageGraphic(overlayPlaneIod, overlayPixelData); if (overlayImageGraphic != null) { _overlayGraphic = overlayImageGraphic; this.Color = System.Drawing.Color.PeachPuff; base.Graphics.Add(overlayImageGraphic); } if (string.IsNullOrEmpty(overlayPlaneIod.OverlayLabel)) { if (overlayPlaneIod.IsMultiFrame) base.Name = string.Format(SR.FormatDefaultMultiFrameOverlayGraphicName, _source, _index, frameIndex); else base.Name = string.Format(SR.FormatDefaultSingleFrameOverlayGraphicName, _source, _index, frameIndex); } else { base.Name = overlayPlaneIod.OverlayLabel; } }
/// <summary> /// Constructs a new user-created <see cref="OverlayPlaneGraphic"/> with the specified dimensions. /// </summary> /// <param name="rows">The number of rows in the overlay.</param> /// <param name="columns">The number of columns in the overlay.</param> protected OverlayPlaneGraphic(int rows, int columns) { Platform.CheckPositive(rows, "rows"); Platform.CheckPositive(columns, "columns"); _index = -1; _frameIndex = 0; _label = string.Empty; _description = string.Empty; _type = OverlayType.G; _subtype = null; _source = OverlayPlaneSource.User; _overlayGraphic = new GrayscaleImageGraphic( rows, columns, // the reported overlay dimensions 8, // bits allocated is always 8 8, // overlays always have bit depth of 1, but we upconverted the data 7, // the high bit is now 7 after upconverting false, false, // overlays aren't signed and don't get inverted 1, 0, // overlays have no rescale MemoryManager.Allocate<byte>(rows*columns)); // new empty pixel buffer this.Color = System.Drawing.Color.PeachPuff; base.Graphics.Add(_overlayGraphic); }