У меня есть 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 ...
У меня 2 вопроса:
- Почему я получаю 0.0 значения от GetScalarPointer?
- Я нахожусь на правильном пути, чтобы создать гистограмму из vtkDICOMImageReader? Я не видел ничего подобного ...
спасибо.
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();
где р Идентификатор StringArray ДМК файлов ... 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
ш hy? Кроме того, я пробовал с другими типами vtk: VTK_SHORT, тот же результат ...
P.S. Я пытался так:
m_pDICOMReader->SetFileNames(p);
m_pDICOMReader->GetOutput()->AllocateScalars(VTK_DOUBLE, 1);
m_pDICOMReader->Update();
Результат 0, 0, 0;
Не могли бы вы показать полный код загрузки и инициализации 'm_pDICOMReader'. – JohnnyQ
Несомненно. Через минуту ... – flaviu2
Я думаю, вам нужно выделить их с помощью imageData-> AllocateScalars (VTK_DOUBLE, 1); 'перед тем, как вы сможете получить к ним доступ с помощью GetScalarPointer' - см. Также [http://www.vtk.org/ Wiki/VTK/Примеры/Cxx/ImageData/IterateImageData] (http://www.vtk.org/Wiki/VTK/Examples/Cxx/ImageData/IterateImageData) – JohnnyQ