将DICOM转换为JPG - 错误

时间:2015-05-23 18:52:56

标签: c# dicom

我使用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.ArgumentException'的例外情况发生在System.Drawing.dll中但未在用户代码中处理

在这一行:

Image returnImage = Image.FromStream(ms);

有没有人有解决方案?

1 个答案:

答案 0 :(得分:0)

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

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

  2. 来自ByteBuffer的数据太大,无法让GDI制作图像

  3. 数据不是已知的图像格式,Image.FromStream无法对其进行解码。 (例如,它是原始像素数据吗?如果是这样,你必须通过将像素字节写入编码器来不同地构建图像)

  4. 额外提示:

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