- 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.
Out-of-the-box, fo-dicom for .NET defaults to Windows Forms-style image rendering. To switch to WPF-style image rendering, call:
ImageManager.SetImplementation(WPFImageManager.Instance);
By default, logging defaults to the no-op NullLogerManager
. On .NET, several log managers are available and can be enabled like this:
LogManager.SetImplementation(ConsoleLogManager.Instance); // or ...
LogManager.SetImplementation(NLogManager.Instance); // or ...
On Universal Windows Platform, Xamarin iOS, Xamarin Android and Mono there is only one operational log manager available, namely MetroLogManager.Instance
.
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().AsBitmap().Save(@"test.jpg"); // Windows Forms
image.RenderImage().AsUIImage().AsJPEG().Save(@"test.jpg", true); // iOS
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
There are a number of simple sample applications that use fo-dicom available in separate repository here. These also include the samples that were previously included in the Examples sub-folder of the VS solutions.
- Colby Dillion
- Anders Gustafsson, Cureos AB
- Ian Yates
- Hesham Desouky, Nebras Technology
- Chris Horn
- Mahesh Dubey
- Alexander Saratow
- Justin Wake
- Ryan Melena
- Rickard Holmberg
- Chris Hafey
- Michael Pavlovsky
- Johannes Liegert
- Håkan MacLean
- captainstark
- lste
- Thunderstriker
- Ed55
This library is licensed under the Microsoft Public License (MS-PL). See License.txt for more information.