Skip to content

Fellow Oak DICOM for .NET, Universal Windows, Android, iOS and Mono

License

Notifications You must be signed in to change notification settings

0xLigety/fo-dicom

 
 

Repository files navigation

fo-dicom logo

Fellow Oak DICOM

NuGet Pre Release NuGet Build status Stories in Ready Join the chat at https://gitter.im/fo-dicom/fo-dicom

Features

  • Core functionality in Portable Class Library (PCL)
  • Targets .NET 4.5 and higher, Universal Windows Platform, Xamarin iOS, Xamarin Android, and Mono
  • DICOM dictionary version 2015c
  • High-performance, fully asynchronous async/await API
  • (.NET and UWP only) JPEG (including lossless), JPEG-LS, JPEG2000, and RLE image compression
  • Supports very large datasets with content loading on demand
  • Image rendering

Installation

Easiest is to obtain fo-dicom binaries from NuGet. This package contains all assemblies required to consume fo-dicom in a .NET application.

Starting with fo-dicom version 2.0, there will also be separate NuGet packages available for Dicom.Core, Dicom.Legacy and Dicom.Platform. Dicom.Core is the PCL library with core functionality, Dicom.Legacy is a PCL library with obsolete asynchronous API methods, and Dicom.Platform contains the support libraries required to run fo-dicom on specific target platforms. As of now, .NET 4.5 and higher, Universal Windows Platform, Xamarin iOS and Xamarin Android are the available platforms in the Dicom.Platform NuGet package.

fo-dicom can use a wide variety of logging frameworks. These connectors come in separate NuGet packages for NLog, Serilog, log4net and MetroLog. The MetroLog connector is a Portable Class Library, whereas the other logging connectors are .NET dedicated libraries.

v2.0 Breaking Change

Due to the split into a core Portable Class Library and platform-specific support libraries, manager classes must be initiated before fo-dicom can be used in an application. Initialization should be performed using one of the Dicom.Managers.Setup overloads, e.g.

Dicom.Managers.Setup();

In a .NET application, initialization may additionally require selection of the appropriate log and image managers. Available image managers are WinFormsImageManager.Instance and WPFImageManager.Instance:

Dicom.Managers.Setup(WinFormsImageManager.Instance);  // or ...
Dicom.Managers.Setup(WPFImageManager.Instance);

Several log managers are available on .NET, for example ConsoleLogManager.Instance and NLogManager.Instance:

Dicom.Managers.Setup(ConsoleLogManager.Instance);  // or ...
Dicom.Managers.Setup(NLogManager.Instance);        // or ...

To configure both the log and image managers, use the Dicom.Managers.Setup(LogManager, ImageManager) overload.

On Universal Windows Platform, Xamarin iOS, Xamarin Android and Mono there is only one image manager available, and this manager is pre-selected in the Dicom.Managers.Setup call.

Examples

File Operations

var file = DicomFile.Open(@"test.dcm");             // Alt 1
var file = await DicomFile.OpenAsync(@"test.dcm");  // Alt 2

var patientid = file.Dataset.Get<string>(DicomTag.PatientID);

file.Dataset.Add(DicomTag.PatientsName, "DOE^JOHN");

// creates a new instance of DicomFile
file = file.ChangeTransferSyntax(DicomTransferSyntax.JPEGProcess14SV1);

file.Save(@"output.dcm");             // Alt 1
await file.SaveAsync(@"output.dcm");  // Alt 2

Render Image to JPEG

var image = new DicomImage(@"test.dcm");
image.RenderImage().Save(@"test.jpg");

C-Store SCU

var client = new DicomClient();
client.AddRequest(new DicomCStoreRequest(@"test.dcm"));
client.Send("127.0.0.1", 12345, false, "SCU", "ANY-SCP");             // Alt 1
await client.SendAsync("127.0.0.1", 12345, false, "SCU", "ANY-SCP");  // Alt 2

C-Echo SCU/SCP

var server = new DicomServer<DicomCEchoProvider>(12345);

var client = new DicomClient();
client.NegotiateAsyncOps();
for (int i = 0; i < 10; i++)
    client.AddRequest(new DicomCEchoRequest());
client.Send("127.0.0.1", 12345, false, "SCU", "ANY-SCP");             // Alt 1
await client.SendAsync("127.0.0.1", 12345, false, "SCU", "ANY-SCP");  // Alt 2

C-Find SCU

var cfind = DicomCFindRequest.CreateStudyQuery(patientId: "12345");
cfind.OnResponseReceived = (DicomCFindRequest rq, DicomCFindResponse rp) => {
	Console.WriteLine("Study UID: {0}", rp.Dataset.Get<string>(DicomTag.StudyInstanceUID));
};

var client = new DicomClient();
client.AddRequest(cfind);
client.Send("127.0.0.1", 104, false, "SCU-AE", "SCP-AE");             // Alt 1
await client.SendAsync("127.0.0.1", 104, false, "SCU-AE", "SCP-AE");  // Alt 2

C-Move SCU

var cmove = new DicomCMoveRequest("DEST-AE", studyInstanceUid);

var client = new DicomClient();
client.AddRequest(cmove);
client.Send("127.0.0.1", 104, false, "SCU-AE", "SCP-AE");             // Alt 1
await client.SendAsync("127.0.0.1", 104, false, "SCU-AE", "SCP-AE");  // Alt 2

Contributors

License

This library is licensed under the Microsoft Public License (MS-PL). See License.txt for more information.

About

Fellow Oak DICOM for .NET, Universal Windows, Android, iOS and Mono

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 53.2%
  • C# 43.1%
  • C++ 3.7%