public DcmPixelData(DcmDataset dataset) { _transferSyntax = dataset.InternalTransferSyntax; _lossy = dataset.GetString(DicomTags.LossyImageCompression, "00") != "00"; _lossyMethod = dataset.GetString(DicomTags.LossyImageCompressionMethod, String.Empty); _lossyRatio = dataset.GetString(DicomTags.LossyImageCompressionRatio, String.Empty); _frames = dataset.GetInt32(DicomTags.NumberOfFrames, 1); _width = dataset.GetUInt16(DicomTags.Columns, 0); _height = dataset.GetUInt16(DicomTags.Rows, 0); _bitsStored = dataset.GetUInt16(DicomTags.BitsStored, 0); _bitsAllocated = dataset.GetUInt16(DicomTags.BitsAllocated, 0); _highBit = dataset.GetUInt16(DicomTags.HighBit, (ushort)(_bitsStored - 1)); _samplesPerPixel = dataset.GetUInt16(DicomTags.SamplesPerPixel, 0); _pixelRepresentation = dataset.GetUInt16(DicomTags.PixelRepresentation, 0); _planarConfiguration = dataset.GetUInt16(DicomTags.PlanarConfiguration, 0); _photometricInterpretation = dataset.GetString(DicomTags.PhotometricInterpretation, String.Empty); _rescaleSlope = dataset.GetDouble(DicomTags.RescaleSlope, 1.0); _rescaleIntercept = dataset.GetDouble(DicomTags.RescaleIntercept, 0.0); _pixelDataItem = dataset.GetItem(DicomTags.PixelData); _hasPixelPadding = dataset.Contains(DicomTags.PixelPaddingValue); if (_hasPixelPadding) { DcmElement elem = dataset.GetElement(DicomTags.PixelPaddingValue); if (elem is DcmUnsignedShort && elem.GetVM() > 0) { _pixelPaddingValue = (elem as DcmUnsignedShort).GetValue(); } else if (elem is DcmSignedShort && elem.GetVM() > 0) { _pixelPaddingValue = (elem as DcmSignedShort).GetValue(); } else { _pixelPaddingValue = MinimumDataValue; } } }
private void Load(DcmDataset ds) { _rows = ds.GetUInt16(OverlayTag(DicomTags.OverlayRows), 0); _columns = ds.GetUInt16(OverlayTag(DicomTags.OverlayColumns), 0); _type = ds.GetString(OverlayTag(DicomTags.OverlayType), "Unknown"); DicomTag tag = OverlayTag(DicomTags.OverlayOrigin); if (ds.Contains(tag)) { short[] xy = ds.GetSS(tag).GetValues(); if (xy != null && xy.Length == 2) { _originX = xy[0]; _originY = xy[1]; } } _bitsAllocated = ds.GetUInt16(OverlayTag(DicomTags.OverlayBitsAllocated), 1); _bitPosition = ds.GetUInt16(OverlayTag(DicomTags.OverlayBitPosition), 0); tag = OverlayTag(DicomTags.OverlayData); if (ds.Contains(tag)) { DcmElement elem = ds.GetElement(tag); _data = elem.ByteBuffer.ToBytes(); } _description = ds.GetString(OverlayTag(DicomTags.OverlayDescription), String.Empty); _subtype = ds.GetString(OverlayTag(DicomTags.OverlaySubtype), String.Empty); _label = ds.GetString(OverlayTag(DicomTags.OverlayLabel), String.Empty); _frames = ds.GetInt32(OverlayTag(DicomTags.NumberOfFramesInOverlay), 1); _frameOrigin = ds.GetUInt16(OverlayTag(DicomTags.ImageFrameOrigin), 1); //TODO: include ROI }
private DicomReadStatus ParseTag(DicomTag stopAtTag, DicomReadOptions options) { if (_tag == null) { if (_remain >= 4) { _pos = _stream.Position + _offset; ushort g = _reader.ReadUInt16(); if (Flags.IsSet(options, DicomReadOptions.FileMetaInfoOnly) && g != 0x0002) { _stream.Seek(-2, SeekOrigin.Current); return(DicomReadStatus.SuccessEndRead); } ushort e = _reader.ReadUInt16(); if (DicomTag.IsPrivateGroup(g) && e > 0x00ff) { uint card = DicomTag.GetCard(g, e); if ((card & 0xffffff00) != _privateCreatorCard) { _privateCreatorCard = card & 0xffffff00; DicomTag pct = DicomTag.GetPrivateCreatorTag(g, e); DcmDataset ds = _dataset; if (_sds.Count > 0 && _sds.Count == _sqs.Count) { ds = _sds.Peek(); if (!ds.Contains(pct)) { ds = _dataset; } } _privateCreatorId = ds.GetString(pct, String.Empty); } _tag = new DicomTag(g, e, _privateCreatorId); } else { _tag = new DicomTag(g, e); if (g == 0xfffe) { if (_tag == DicomTags.Item || _tag == DicomTags.ItemDelimitationItem || _tag == DicomTags.SequenceDelimitationItem) { _vr = DicomVR.NONE; } } } _remain -= 4; _bytes += 4; _read += 4; } else { return(NeedMoreData(4)); } } if (_tag == DicomTags.ItemDelimitationItem && Flags.IsSet(options, DicomReadOptions.SequenceItemOnly)) { return(DicomReadStatus.SuccessEndRead); } if (_tag >= stopAtTag) { return(DicomReadStatus.SuccessEndRead); } return(DicomReadStatus.Success); }