2013-12-19 5 views
0

У меня есть том, который хранится как фрагменты в памяти C#. Срезки могут не быть последовательными в памяти. Я хочу импортировать эти данные и создать объект vtkImageData.vtkImageData от сторонней структуры

Первый способ, который я нашел, - использовать vtkImageImporter, но этот импортер принимает только один указатель на пустоту как ввод данных. Поскольку мои фрагменты не могут быть последовательными в памяти, я не могу передать один указатель на мои данные среза.

Второй вариант - создать vtkImageData с нуля и использовать vtkImageData-> GetScalarPointer() для получения указателя на его данные. Затем заполните это с помощью цикла. Это довольно дорого (хотя memcpy может ускорить процесс бит) .Я мог бы также комбинировать подход копирования с vtkImageImport ofcourse.

Являются ли эти мои единственные варианты, или есть лучший способ получить данные в объект vtk? Я хочу быть уверенным, что нет другого варианта перед тем, как я возьму подход к копированию (производительность тяжелая) или изменим хранение на высоком уровне моих срезов, чтобы они стали последовательными в памяти.

+0

@Basting: Используете ли вы управляемую память или используете C++? –

+0

@ElMarce Я могу использовать C++, если нужно. – bastijn

ответ

1

Я не слишком хорошо знаком с VTK для C# (ActiViz). подход и довольно быстрый, чтобы использовать vtkImageData-> GetScalarPointer() и вручную скопировать ваши фрагменты. Это увеличит скорость хранения всей памяти первым, как вы сказали, возможно, вы хотите сделать это таким более надежный способ (изменение числа):

vtkImageData * img = vtkImageData::New(); 
    img->SetExtent(0, 255, 0, 255, 0, 9); 
    img->SetSpacing(sx , sy, sz); 
    img->SetOrigin(ox, oy, oz); 
    img->SetNumberOfScalarComponents(1); 
    img->SetScalarTypeToFloat(); 
    img->AllocateScalars(); 

Тогда это не трудно сделать что-то вроде:

float * fp = static_cast<float *>(img->GetScalarPointer()); 

    for (int i = 0; i < 256* 256* 10; i ++) { 
     fp[i] = mydata[i] 
    } 

Другим вариантом выбора является создание собственного vtkImporter, основанного на коде в vtkImageImport.

Смежные вопросы