- 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
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.
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.
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
var image = new DicomImage(@"test.dcm");
image.RenderImage().Save(@"test.jpg");
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
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
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
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
- Colby Dillion
- Anders Gustafsson, Cureos AB
- Hesham Desouky, Nebras Technology
- Ian Yates
- Chris Horn
- Mahesh Dubey
- Alexander Saratow
- Justin Wake
- Ryan Melena
- Chris Hafey
- Michael Pavlovsky
- captainstark
- lste
This library is licensed under the Microsoft Public License (MS-PL). See License.txt for more information.