Exemplo n.º 1
0
        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;
                }
            }
        }
Exemplo n.º 2
0
        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
        }
Exemplo n.º 3
0
        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);
        }