How to convert from RGB byte array to vtkImageData?

Hi all.

I’m using vtkImageViewer2 with vtkImageData to draw the mono8 image.

My code is as below:

vtkNew<vtkImageData> imageData;

vtkSmartPointer<vtkAbstractArray> arr;
arr = vtkUnsignedCharArray::New();
vtkSmartPointer<vtkUnsignedCharArray> tmp = dynamic_cast<vtkUnsignedCharArray*>(arr.Get());
tmp->SetArray((unsigned char*)ptr, w*h*bpp / 8, 1);
imageData->GetPointData()->SetScalars(tmp);
imageData->SetDimensions(w, h, 1);
imageData->SetExtent(0, w - 1, 0, h - 1, 0, (1 << bpp) - 1);

m_imageViewer->GetRenderWindow()->Render();

It works well. But I don’t know how to using vtkImageData with RGB byte array.

Could you please advise me, how to convert from RGB byte array to vtkImageData?

Thank you.

oh… I found the solution.

arr = vtkUnsignedCharArray::New();
vtkSmartPointer<vtkUnsignedCharArray> tmp = dynamic_cast<vtkUnsignedCharArray*>(arr.Get());
tmp->SetArray((unsigned char*)ptr, w*h*bpp / 8, 1);
tmp->SetNumberOfComponents(3);

‘SetNumberOfComponents(3)’ is solution.