c# - 将 jpg 图像作为 jpg 图像添加到 DICOM 文件

标签 c# dicom fo-dicom

你好,

我正在读取 jpg 图像并尝试将其作为 jpg 格式存储在 DICOM 文件中。我希望尽可能少的操作以防止任何丢失或 ICC 配置文件更改。

我试过:

...
data.Add(DicomTag.TransferSyntaxUID, DicomUID.JPEGLSLossless);

data.Add(DicomTag.PhotometricInterpretation, PhotometricInterpretation.Rgb);
data.Add(DicomTag.SamplesPerPixel, "3");
data.Add(DicomTag.PlanarConfiguration, "0");
data.Add(DicomTag.BitsAllocated, (ushort)8);
data.Add(DicomTag.BitsStored, (ushort)8);
data.Add(DicomTag.HighBit, (ushort)7);
data.Add(DicomTag.PixelRepresentation, "0");
data.Add(DicomTag.BurnedInAnnotation, "NO");
data.Add(DicomTag.LossyImageCompression, "01");
data.Add(DicomTag.LossyImageCompressionRatio, "10");
data.Add(DicomTag.LossyImageCompressionMethod, "ISO_10918_1");
...

DicomPixelData pixelData = DicomPixelData.Create(data, true);

using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(imageFilename))
{
    byte[] pixels = GetPixels(bitmap);
    MemoryByteBuffer buffer = new MemoryByteBuffer(pixels);
    pixelData.AddFrame(buffer);
}

and

using (Image image = Image.FromFile(imageFilename))
{
    byte[] pixels = ImageToByteArray(image);
    MemoryByteBuffer buffer = new MemoryByteBuffer(pixels);
    pixelData.AddFrame(buffer);
}

它似乎将图像存储为 BMP,因为 DICOM 文件的大小膨胀得令人难以置信。

我尝试了 DicomTag.TransferSyntaxUID 的不同组合:

data.Add(DicomTag.TransferSyntaxUID, DicomUID.JPEGLSLossless);
data.Add(DicomTag.TransferSyntaxUID, DicomUID.JPEGBaseline1);
data.Add(DicomTag.TransferSyntaxUID, DicomUID.JPEGLosslessNonHierarchical14);

想法?

(注意:这也是在 fo-dicom 用户组上发布的)

最佳答案

我们找到了答案:

DicomDataset data = new DicomDataset() { };

改为:

DicomDataset data = new DicomDataset(DicomTransferSyntax.JPEGProcess1) { };

这是基于这篇文章:

https://github.com/fo-dicom/fo-dicom/issues/553

关于c# - 将 jpg 图像作为 jpg 图像添加到 DICOM 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52649545/

相关文章:

c# - C# 是否在声明非空字符串时隐式分配一个空字符串?

c# - fo-DICOM:如何在DicomClient中指定本地出站端口?

c++ - 如何将深度为 17 的 DicomImage(Dcmtk) 转换为 Mat(Opencv) 对象?

c# - 设置文件通信的监听端口

dicom - Fo-dicom:如何添加 "empty, if unknown"整数字符串类型2属性

dicom - 如何将患者插入/更新到 DICOM WorkList RIS?

c# - 使用 fo-dicom 创建 Dicom 序列

c# - C# 中的哈希密码和盐密码

c# - 简单 Odata 客户端 - 如何在每个请求 header 中添加 oAuth token ?

c# - Ajax.net - 改善页面加载时间