public void EndRead_ValidSource_ReturnsSuccess() { using (var stream = File.OpenRead(@".\Test Data\CT1_J2KI")) { var source = new StreamByteSource(stream); var reader = new DicomFileReader(); const DicomReaderResult expected = DicomReaderResult.Success; var actual = reader.EndRead( reader.BeginRead(source, new MockObserver(), new MockObserver(), null, null)); Assert.Equal(expected, actual); } }
public static IAsyncResult BeginOpen(string fileName, AsyncCallback callback, object state) { DicomFile df = new DicomFile(); df.File = new FileReference(fileName); FileByteSource source = new FileByteSource(df.File); EventAsyncResult result = new EventAsyncResult(callback, state); DicomFileReader reader = new DicomFileReader(); reader.BeginRead(source, new DicomDatasetReaderObserver(df.FileMetaInfo), new DicomDatasetReaderObserver(df.Dataset), OnReadComplete, new Tuple<DicomFileReader, DicomFile, EventAsyncResult>(reader, df, result)); return result; }
public void Read_CompressedImage_RecognizeTransferSyntax() { using (var stream = File.OpenRead(@".\Test Data\CT1_J2KI")) { var source = new StreamByteSource(stream); var reader = new DicomFileReader(); var fileMetaInfo = new DicomFileMetaInformation(); var dataset = new DicomDataset(); reader.Read( source, new DicomDatasetReaderObserver(fileMetaInfo), new DicomDatasetReaderObserver(dataset)); var expected = DicomTransferSyntax.JPEG2000Lossy; var actual = reader.Syntax; Assert.Equal(expected, actual); } }
public void Read_ValidSource_ReturnsSuccess() { using (var stream = File.OpenRead(@".\Test Data\CT1_J2KI")) { var source = new StreamByteSource(stream); var reader = new DicomFileReader(); var fileMetaInfo = new DicomFileMetaInformation(); var dataset = new DicomDataset(); const DicomReaderResult expected = DicomReaderResult.Success; var actual = reader.Read( source, new DicomDatasetReaderObserver(fileMetaInfo), new DicomDatasetReaderObserver(dataset)); Assert.Equal(expected, actual); var modality = dataset.Get<string>(DicomTag.Modality); Assert.Equal("CT", modality); } }
/// <summary> /// Reads the specified file and returns a DicomFile object. Note that the values for large /// DICOM elements (e.g. PixelData) are read in "on demand" to conserve memory. Large DICOM elements /// are determined by their size in bytes - see the default value for this in the FileByteSource._largeObjectSize /// </summary> /// <param name="file">The file reference of the DICOM file</param> /// <param name="fallbackEncoding">Encoding to apply when attribute Specific Character Set is not available.</param> /// <returns>DicomFile instance</returns> internal static DicomFile Open(IFileReference file, Encoding fallbackEncoding) { if (fallbackEncoding == null) { throw new ArgumentNullException("fallbackEncoding"); } DicomFile df = new DicomFile(); try { df.File = file; using (var source = new FileByteSource(file)) { DicomFileReader reader = new DicomFileReader(); var result = reader.Read( source, new DicomDatasetReaderObserver(df.FileMetaInfo), new DicomDatasetReaderObserver(df.Dataset, fallbackEncoding)); if (result == DicomReaderResult.Processing) { throw new DicomFileException(df, "Invalid read return state: {state}", result); } if (result == DicomReaderResult.Error) { return null; } df.IsPartial = result == DicomReaderResult.Stopped || result == DicomReaderResult.Suspended; df.Format = reader.FileFormat; df.Dataset.InternalTransferSyntax = reader.Syntax; return df; } } catch (Exception e) { throw new DicomFileException(df, e.Message, e); } }
/// <summary> /// Asynchronously read a DICOM file from stream. /// </summary> /// <param name="stream">Stream to read.</param> /// <param name="fallbackEncoding">Encoding to use if encoding cannot be obtained from DICOM file.</param> /// <param name="stop">Stop criterion in dataset.</param> /// <returns>Awaitable <see cref="DicomFile"/> instance.</returns> public static async Task<DicomFile> OpenAsync(Stream stream, Encoding fallbackEncoding, Func<ParseState, bool> stop = null) { if (fallbackEncoding == null) { throw new ArgumentNullException("fallbackEncoding"); } var df = new DicomFile(); try { var source = new StreamByteSource(stream); var reader = new DicomFileReader(); var result = await reader.ReadAsync( source, new DicomDatasetReaderObserver(df.FileMetaInfo), new DicomDatasetReaderObserver(df.Dataset, fallbackEncoding), stop).ConfigureAwait(false); if (result == DicomReaderResult.Processing) { throw new DicomFileException(df, "Invalid read return state: {state}", result); } if (result == DicomReaderResult.Error) { return null; } df.IsPartial = result == DicomReaderResult.Stopped || result == DicomReaderResult.Suspended; df.Format = reader.FileFormat; df.Dataset.InternalTransferSyntax = reader.Syntax; return df; } catch (Exception e) { throw new DicomFileException(df, e.Message, e); } }
public static DicomFile Open(Stream stream, Encoding fallbackEncoding) { if (fallbackEncoding == null) { throw new ArgumentNullException("fallbackEncoding"); } var df = new DicomFile(); try { var source = new StreamByteSource(stream); var reader = new DicomFileReader(); reader.Read(source, new DicomDatasetReaderObserver(df.FileMetaInfo), new DicomDatasetReaderObserver(df.Dataset, fallbackEncoding)); df.Format = reader.FileFormat; df.Dataset.InternalTransferSyntax = reader.Syntax; return df; } catch (Exception e) { throw new DicomFileException(df, e.Message, e); } }
/// <summary> /// Reads the specified filename and returns a DicomFile object. Note that the values for large /// DICOM elements (e.g. PixelData) are read in "on demand" to conserve memory. Large DICOM elements /// are determined by their size in bytes - see the default value for this in the FileByteSource._largeObjectSize /// </summary> /// <param name="fileName">The filename of the DICOM file</param> /// <param name="fallbackEncoding">Encoding to apply when attribute Specific Character Set is not available.</param> /// <returns>DicomFile instance</returns> public static DicomFile Open(string fileName, Encoding fallbackEncoding) { if (fallbackEncoding == null) { throw new ArgumentNullException("fallbackEncoding"); } DicomFile df = new DicomFile(); try { df.File = new FileReference(fileName); using (var source = new FileByteSource(df.File)) { DicomFileReader reader = new DicomFileReader(); reader.Read(source, new DicomDatasetReaderObserver(df.FileMetaInfo), new DicomDatasetReaderObserver(df.Dataset, fallbackEncoding)); df.Format = reader.FileFormat; df.Dataset.InternalTransferSyntax = reader.Syntax; return df; } } catch (Exception e) { throw new DicomFileException(df, e.Message, e); } }
public new static IAsyncResult BeginOpen(string fileName, AsyncCallback callback, object state) { var df = new DicomDirectory(); // reset datasets df.FileMetaInfo.Clear(); df.Dataset.Clear(); df.File = new FileReference(fileName); FileByteSource source = new FileByteSource(df.File); EventAsyncResult result = new EventAsyncResult(callback, state); DicomFileReader reader = new DicomFileReader(); var datasetObserver = new DicomDatasetReaderObserver(df.Dataset); var dirObserver = new DicomDirectoryReaderObserver(df.Dataset); reader.BeginRead(source, new DicomDatasetReaderObserver(df.FileMetaInfo), new DicomReaderMultiObserver(datasetObserver, dirObserver), OnReadComplete, new Tuple<DicomFileReader, DicomDirectory, DicomDirectoryReaderObserver, EventAsyncResult>(reader, df, dirObserver, result)); return result; }
public new static DicomDirectory Open(string fileName) { var df = new DicomDirectory(); // reset datasets df.FileMetaInfo.Clear(); df.Dataset.Clear(); try { df.File = new FileReference(fileName); using (var source = new FileByteSource(df.File)) { DicomFileReader reader = new DicomFileReader(); var datasetObserver = new DicomDatasetReaderObserver(df.Dataset); var dirObserver = new DicomDirectoryReaderObserver(df.Dataset); reader.Read(source, new DicomDatasetReaderObserver(df.FileMetaInfo), new DicomReaderMultiObserver(datasetObserver, dirObserver)); df.Format = reader.FileFormat; df.Dataset.InternalTransferSyntax = reader.Syntax; df._directoryRecordSequence = df.Dataset.Get<DicomSequence>(DicomTag.DirectoryRecordSequence); df.RootDirectoryRecord = dirObserver.BuildDirectoryRecords(); return df; } } catch (Exception e) { throw new DicomFileException(df, e.Message, e); } }
public static DicomReaderResult EndRead(this DicomFileReader @this, IAsyncResult result) { return(AsyncFactory.ToEnd <DicomReaderResult>(result)); }
public static DicomFile Open(Stream stream) { var df = new DicomFile(); try { var source = new StreamByteSource(stream); var reader = new DicomFileReader(); reader.Read(source, new DicomDatasetReaderObserver(df.FileMetaInfo), new DicomDatasetReaderObserver(df.Dataset)); df.Format = reader.FileFormat; df.Dataset.InternalTransferSyntax = reader.Syntax; return df; } catch (Exception e) { throw new DicomFileException(df, e.Message, e); } }
private static DicomDirectory FinalizeDicomDirectoryLoad( DicomDirectory df, DicomFileReader reader, DicomDirectoryReaderObserver dirObserver, DicomReaderResult result) { if (result == DicomReaderResult.Processing) { throw new DicomFileException(df, "Invalid read return state: {state}", result); } if (result == DicomReaderResult.Error) { return null; } df.IsPartial = result == DicomReaderResult.Stopped || result == DicomReaderResult.Suspended; df.Format = reader.FileFormat; df.Dataset.InternalTransferSyntax = reader.Syntax; df._directoryRecordSequence = df.Dataset.Get<DicomSequence>(DicomTag.DirectoryRecordSequence); df.RootDirectoryRecord = dirObserver.BuildDirectoryRecords(); return df; }
/// <summary> /// Asynchronously read DICOM Directory from stream. /// </summary> /// <param name="stream">Stream to read.</param> /// <param name="fallbackEncoding">Encoding to apply if it cannot be identified from DICOM directory.</param> /// <param name="stop">Stop criterion in dataset.</param> /// <returns>Awaitable <see cref="DicomDirectory"/> instance.</returns> public static new async Task<DicomDirectory> OpenAsync(Stream stream, Encoding fallbackEncoding, Func<ParseState, bool> stop = null) { if (fallbackEncoding == null) { throw new ArgumentNullException(nameof(fallbackEncoding)); } var df = new DicomDirectory(); try { var source = new StreamByteSource(stream); var reader = new DicomFileReader(); var dirObserver = new DicomDirectoryReaderObserver(df.Dataset); var result = await reader.ReadAsync( source, new DicomDatasetReaderObserver(df.FileMetaInfo), new DicomReaderMultiObserver( new DicomDatasetReaderObserver(df.Dataset, fallbackEncoding), dirObserver), stop).ConfigureAwait(false); return FinalizeDicomDirectoryLoad(df, reader, dirObserver, result); } catch (Exception e) { throw new DicomFileException(df, e.Message, e); } }
/// <summary> /// Read DICOM Directory. /// </summary> /// <param name="fileName">File name.</param> /// <param name="fallbackEncoding">Encoding to apply if it cannot be identified from DICOM directory.</param> /// <param name="stop">Stop criterion in dataset.</param> /// <returns><see cref="DicomDirectory"/> instance.</returns> public static new DicomDirectory Open(string fileName, Encoding fallbackEncoding, Func<ParseState, bool> stop = null) { if (fallbackEncoding == null) { throw new ArgumentNullException(nameof(fallbackEncoding)); } var df = new DicomDirectory(); try { df.File = IOManager.CreateFileReference(fileName); using (var source = new FileByteSource(df.File)) { var reader = new DicomFileReader(); var dirObserver = new DicomDirectoryReaderObserver(df.Dataset); var result = reader.Read( source, new DicomDatasetReaderObserver(df.FileMetaInfo), new DicomReaderMultiObserver( new DicomDatasetReaderObserver(df.Dataset, fallbackEncoding), dirObserver), stop); return FinalizeDicomDirectoryLoad(df, reader, dirObserver, result); } } catch (Exception e) { throw new DicomFileException(df, e.Message, e); } }
/// <summary> /// Asynchronously read DICOM Directory. /// </summary> /// <param name="fileName">File name.</param> /// <param name="fallbackEncoding">Encoding to apply if it cannot be identified from DICOM directory.</param> /// <param name="stop">Stop criterion in dataset.</param> /// <returns>Awaitable <see cref="DicomDirectory"/> instance.</returns> public static new async Task<DicomDirectory> OpenAsync(string fileName, Encoding fallbackEncoding, Func<ParseState, bool> stop = null) { if (fallbackEncoding == null) { throw new ArgumentNullException("fallbackEncoding"); } var df = new DicomDirectory(); // reset datasets df.FileMetaInfo.Clear(); df.Dataset.Clear(); try { df.File = IOManager.CreateFileReference(fileName); using (var source = new FileByteSource(df.File)) { var reader = new DicomFileReader(); var datasetObserver = new DicomDatasetReaderObserver(df.Dataset, fallbackEncoding); var dirObserver = new DicomDirectoryReaderObserver(df.Dataset); var result = await reader.ReadAsync( source, new DicomDatasetReaderObserver(df.FileMetaInfo), new DicomReaderMultiObserver(datasetObserver, dirObserver), stop).ConfigureAwait(false); if (result == DicomReaderResult.Processing) { throw new DicomFileException(df, "Invalid read return state: {state}", result); } if (result == DicomReaderResult.Error) { return null; } df.IsPartial = result == DicomReaderResult.Stopped || result == DicomReaderResult.Suspended; df.Format = reader.FileFormat; df.Dataset.InternalTransferSyntax = reader.Syntax; df._directoryRecordSequence = df.Dataset.Get<DicomSequence>(DicomTag.DirectoryRecordSequence); df.RootDirectoryRecord = dirObserver.BuildDirectoryRecords(); return df; } } catch (Exception e) { throw new DicomFileException(df, e.Message, e); } }