c# - 将 jpg 图像作为 jpg 图像添加到 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) { };
这是基于这篇文章:
推荐阅读
- dataframe - 在比较 pyspark 中的两个数据帧时,如何找出新的内容和发生的变化?
- python - python - 如何连接列表中的两个索引
- ios - Deinit 从未调用自定义 UIView
- shell - 测试字符串外壳中现有的子字符串
- java - 如何在 java rest 模板客户端中修改部分 Content-Disposition
- python - 基于多个条件创建列的清洁方法
- python - 使用 WHILE 循环时如何解决 JSONDecodeError
- ios - ScrollView 对齐到中心
- c# - 无法在 VS2017 上转换 T4 模板
- jboss - 来自 Wildfly 中部署的战争文件的 sun.applet.AppletSecurityException