コード例 #1
0
ファイル: DicomPixelData.cs プロジェクト: fo-dicom/fo-dicom
            /// <summary>
            /// Initialize new instance of EncapsulatedPixelData with new empty pixel data.
            /// </summary>
            /// <param name="dataset">The source dataset where to create new pixel data.</param>
            /// <param name="bitsAllocated">Bits allocated for the pixel data.</param>
            public EncapsulatedPixelData(DicomDataset dataset, int bitsAllocated)
                : base(dataset)
            {
                NumberOfFrames = 0;

                _element = bitsAllocated > 8
                    ? (DicomFragmentSequence) new DicomOtherWordFragment(DicomTag.PixelData)
                    : new DicomOtherByteFragment(DicomTag.PixelData);

                Dataset.AddOrUpdate(_element);
            }
コード例 #2
0
ファイル: DicomDirectory.cs プロジェクト: zinan/fo-dicom
        /// <summary>
        /// Method to call before performing the actual saving.
        /// </summary>
        protected override void OnSave()
        {
            if (RootDirectoryRecord == null)
            {
                throw new InvalidOperationException("No DICOM files added, cannot save DICOM directory");
            }

            _directoryRecordSequence.Items.Clear();
            var calculator = new DicomWriteLengthCalculator(FileMetaInfo.TransferSyntax, DicomWriteOptions.Default);

            //Add the offset for the Directory Record sequence tag itself
            if (FileMetaInfo.TransferSyntax.IsExplicitVR)
            {
                _fileOffset  = 128 + calculator.Calculate(FileMetaInfo) + calculator.Calculate(Dataset);
                _fileOffset += 2; // vr
                _fileOffset += 2; // padding
                _fileOffset += 4; // length
            }
            else
            {
                _fileOffset = 128 + 4 + calculator.Calculate(FileMetaInfo) + calculator.Calculate(Dataset);

                _fileOffset += 4; //sequence element tag
                _fileOffset += 4; //length
            }

            AddDirectoryRecordsToSequenceItem(RootDirectoryRecord);

            if (RootDirectoryRecord != null)
            {
                CalculateOffsets(calculator);

                SetOffsets(RootDirectoryRecord);

                Dataset.AddOrUpdate <uint>(
                    DicomTag.OffsetOfTheFirstDirectoryRecordOfTheRootDirectoryEntity,
                    RootDirectoryRecord.Offset);

                var lastRoot = RootDirectoryRecord;

                while (lastRoot.NextDirectoryRecord != null)
                {
                    lastRoot = lastRoot.NextDirectoryRecord;
                }

                Dataset.AddOrUpdate <uint>(DicomTag.OffsetOfTheLastDirectoryRecordOfTheRootDirectoryEntity, lastRoot.Offset);
            }
            else
            {
                Dataset.AddOrUpdate <uint>(DicomTag.OffsetOfTheFirstDirectoryRecordOfTheRootDirectoryEntity, 0);
                Dataset.AddOrUpdate <uint>(DicomTag.OffsetOfTheLastDirectoryRecordOfTheRootDirectoryEntity, 0);
            }
        }
コード例 #3
0
ファイル: DicomPixelData.cs プロジェクト: vetrocket/fo-dicom
 /// <summary>
 /// Initialize new instance of EncapsulatedPixelData
 /// </summary>
 /// <param name="dataset">The source dataset to extract from or create new pixel data for</param>
 /// <param name="newPixelData">True to create new pixel data, false to read pixel data</param>
 public EncapsulatedPixelData(DicomDataset dataset, bool newPixelData)
     : base(dataset)
 {
     if (newPixelData)
     {
         NumberOfFrames = 0;
         Element        = new DicomOtherByteFragment(DicomTag.PixelData);
         Dataset.AddOrUpdate(Element);
     }
     else
     {
         Element = dataset.Get <DicomFragmentSequence>(DicomTag.PixelData);
     }
 }
コード例 #4
0
ファイル: DicomPixelData.cs プロジェクト: vetrocket/fo-dicom
 /// <summary>
 /// Initialize new instance of OtherWordPixelData
 /// </summary>
 /// <param name="dataset">The source dataset to extract from or create new pixel data for</param>
 /// <param name="newPixelData">True to create new pixel data, false to read pixel data</param>
 public OtherWordPixelData(DicomDataset dataset, bool newPixelData)
     : base(dataset)
 {
     if (newPixelData)
     {
         NumberOfFrames = 0;
         Element        = new DicomOtherWord(DicomTag.PixelData, new CompositeByteBuffer());
         Dataset.AddOrUpdate(Element);
     }
     else
     {
         Element = dataset.Get <DicomOtherWord>(DicomTag.PixelData);
     }
 }
コード例 #5
0
ファイル: DicomPixelData.cs プロジェクト: fo-dicom/fo-dicom
 /// <summary>
 /// Initialize new instance of OtherBytePixelData
 /// </summary>
 /// <param name="dataset">The source dataset to extract from or create new pixel data for</param>
 /// <param name="newPixelData">True to create new pixel data, false to read pixel data</param>
 public OtherBytePixelData(DicomDataset dataset, bool newPixelData)
     : base(dataset)
 {
     if (newPixelData)
     {
         NumberOfFrames = 0;
         _element       = new DicomOtherByte(DicomTag.PixelData, new CompositeByteBuffer());
         Dataset.AddOrUpdate(_element);
     }
     else
     {
         _element = dataset.GetDicomItem <DicomOtherByte>(DicomTag.PixelData);
     }
 }