我有一个vtkDICOMImageReader,我打算在那里创建一个直方图,以便在我自己的CDialog上传播。这是我的试用版:
int* nDim = m_pDICOMReader->GetOutput()->GetDimensions();
for(int z = 0;z < nDim[2];++z)
{
for(int y = 0;y < nDim[1];++y)
{
for(int x= 0 ;x < nDim[0];++x)
{
double* dPixel = static_cast<double*>(m_pDICOMReader->GetOutput()->GetScalarPointer(x, y, z));
TRACE("%f|%f|%f\n", dPixel[0], dPixel[1], dPixel[2]);
}
}
}
但我总是0.0 ...
我有两个问题:
谢谢。
P.S。这是我加载vtlDICOMImageReader:
的代码if(NULL == m_pDICOMReader)
{
m_pDICOMReader = vtkDICOMReader::New();
}
if(! m_pDICOMReader->CanReadFile(lpszPathName))
{
AfxMessageBox(_T("Can not read / parse the file."), MB_ICONERROR);
return FALSE;
}
m_pDICOMReader->SetFileNames(p);
m_pDICOMReader->Update();
其中p是一个dcm文件的字符串... m_pDICOMReader运行良好,因为我在屏幕上有音量,而且移动得很好......
是的,我这样做了:
m_pDICOMReader->GetOutput()->AllocateScalars(VTK_DOUBLE, 1);
int* nDim = m_pDICOMReader->GetOutput()->GetDimensions();
for(int z = 0;z < nDim[2];++z)
{
for(int y = 0;y < nDim[1];++y)
{
for(int x= 0 ;x < nDim[0];++x)
{
double* dPixel = static_cast<double*>(m_pDICOMReader->GetOutput()->GetScalarPointer(x, y, z));
TRACE("%f|%f|%f\n", dPixel[0], dPixel[1], dPixel[2]);
}
}
}
但是给我一些奇怪的价值观:
-6277438562204192500000000000000000000000000000000000000000000000000.000000|-6277438562204192500000000000000000000000000000000000000000000000000.000000|-6277438562204192500000000000000000000000000000000000000000000000000.000000
为什么?另外,我尝试了另一种vtk类型:VTK_SHORT,结果相同......
P.S。 我试过这样:
m_pDICOMReader->SetFileNames(p);
m_pDICOMReader->GetOutput()->AllocateScalars(VTK_DOUBLE, 1);
m_pDICOMReader->Update();
结果为0,0,0;
答案 0 :(得分:0)
使用 AllocateScalars 在查看器上找不到任何内容(无论是2D图像,也不是任何卷)...所以,我做了一些事情(不使用 AllocateScalars ):
int* nDim = m_pDICOMReader->GetOutput()->GetDimensions();
for(int z = 0;z < nDim[2];++z)
{
for(int y = 0;y < nDim[1];++y)
{
for(int x= 0 ;x < nDim[0];++x)
{
unsigned char* chPixel = reinterpret_cast<unsigned char*>(m_pDICOMReader->GetOutput()->GetScalarPointer(x, y, z));
TRACE("%d|%d|%d\n", chPixel[0], chPixel[1], chPixel[2]);
}
}
}
嗯,这里我得到了一些值,但问题是这些循环耗时太长......嗯......很奇怪,但说实话,循环与前面的代码同时进行(double * dPixel =的static_cast(m_pDICOMReader ...))。