/// <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); }
/// <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); } }
/// <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); } }
/// <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); } }
/// <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); } }