【问题标题】:Convert DICOM to JPG - ERROR将 DICOM 转换为 JPG - 错误
【发布时间】:2015-05-23 18:52:55
【问题描述】:

我正在使用 DICOM#(http://sourceforge.net/projects/dicom-cs/) 将 dicom 文件 (.dcm) 转换为 .jpg。 我完成的代码:

string strFileName = nomeFile;
string strOutFileName = Server.MapPath("uploads/" + "teste");
Stream ins = null;
Dataset ds = null;
FileStream fs = new FileStream(strFileName, FileMode.Open, FileAccess.Read);
System.IO.Stream strm = fs;

Dataset imgds;
imgds = new Dataset();
imgds.ReadFile(strm, FileFormat.DICOM_FILE, 10000);

ByteBuffer byteBuffer = imgds.GetByteBuffer(Tags.PixelData);
byte[] byteArray = (byte[])byteBuffer.ToArray();

MemoryStream ms = new MemoryStream(byteArray);
Image returnImage = Image.FromStream(ms);
strOutFileName = strOutFileName + ".PNG";
returnImage.Save(strOutFileName, ImageFormat.Png);

但这给了我一个错误:

System.Drawing.dll 中出现“System.ArgumentException”类型的异常,但未在用户代码中处理

在这一行:

Image returnImage = Image.FromStream(ms);

有人有解决办法吗?

【问题讨论】:

  • 标题为 JPG,代码为 PNG。是哪个?

标签: c# dicom


【解决方案1】:

看起来问题在于从流中解码图像。不幸的是,ArgumentException 是一个非常通用的错误,当底层 GDI 库无法处理您提供的内容时,System.Drawing 类会抛出该错误。我怀疑其中之一:

  1. 您没有从ByteBuffer 创建的数组中的所有字节,因此Image.FromStream 无法对其进行解码

  2. 来自ByteBuffer 的数据太大,GDI 无法从中生成图像

  3. 数据不是已知的图像格式,Image.FromStream 无法解码。 (例如,它是原始像素数据吗?如果是,您必须以不同的方式构建图像,将像素字节写入编码器)

额外提示:

使用 10000 作为传递给 ReadFile 的缓冲区大小不是最佳选择。从底层文件系统读取的块是 4096 字节的倍数,而最适合的缓冲区将具有相同的倍数。请参阅:Optimum file buffer read size?

【讨论】:

  • 查看您尝试读取的实际存储格式的 dicom 文件中的其他 Dicom 图像像素模块属性 (Dicom C.7-11 dicomlookup.com/lookup.asp?sw=Ttable&q=C.7-11)。
  • 听起来不错,但Image.FromStream 应该解码它,如果它是众所周知的(即受 GDI 支持)编码。
  • DICOM 似乎使用了原始像素数据,还是我误解了表 C.7-11?
  • @codekaizen 它可以工作,但 Windows 不附带 GDI 的 DICOM 处理程序。仅当您为其安装处理程序时它才会起作用(我不知道 DICOM# 是否这样做)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 2017-03-02
  • 2014-07-03
  • 1970-01-01
  • 2015-10-23
  • 2014-02-10
相关资源
最近更新 更多