我正在使用gdcm(nuget gdcm-sharp 2.4.4)库从* .dcm文件中获取图像和患者数据。一切都很好用光度解释MONOCHROME2的文件,但后来我得到了一些MONOCHROME1的文件,其中约30%有一个奇怪的错误:图像在对角线“切片”,我找不到原因。 样本链接:incorrect image,correct image
每行像素都有行号的偏移...容易纠正,但我不知道哪个文件需要更正。
问题是:如何判断需要更正的文件,dcm标签是否相同,.dcm文件中唯一不同的是图像尺寸和像素数据...
还有一件事......任何其他软件我试图查看这些图像正确渲染它们。
显示已完成内容的一些代码
$bookRes = $mdb2->query(("SELECT * FROM book WHERE (".join(' OR ', $sqlParams).") $categorySQL ORDER BY title"), $sqlValues);
while ($row = $bookRes->fetchRow()) {
$row['type'] = 'book';
$booksPossibles[] = $row;
}
答案 0 :(得分:1)
只要查看您提供的好与坏图像: 好的是1290 x 1249而坏的是1195 x 1193
由于我使用了Windows位图已经有一段时间了,但我几乎可以肯定它们是逐行填充的(不确定它是2字节,4字节(最可能)还是任何对齐),但是给出了例如,99%肯定发生了什么。
而不是整个缓冲区的单个Marshal.Copy,你需要逐行(只是我的伪代码):
Foreach row:
Marshal.Copy(buff + row_number * DicomImageRowLength, 0, wb.BackBuffer + row_number * wb.BackBufferStride, DicomImageRowLength);
如果Marshal.Copy需要将buff作为第一个参数:
Foreach row:
Marshal.Copy(buff, row_number * DicomImageRowLength, wb.BackBuffer + row_number * wb.BackBufferStride, DicomImageRowLength);
如果你为每个案例逐行复制,希望这适用于所有图像......
我认为你可以通过查看wb.BackBuffer.Size并将它与两种情况下的wb.PixelWidth,wb.PixelHeight和wb.BackBufferStride进行比较来验证这种情况。