public static vtkImageData FromImage(Image img, int numberOfScalarComponents) { Bitmap bitmap = new Bitmap(img); vtkImageData vtkImageData = vtkImageData.New(); vtkImageData.SetScalarTypeToUnsignedChar(); vtkImageData.SetNumberOfScalarComponents(numberOfScalarComponents); vtkImageData.SetDimensions(img.Width, img.Height, 1); vtkImageData.AllocateScalars(); byte[] array = new byte[img.Width * img.Height * vtkImageData.GetNumberOfScalarComponents()]; int num = 0; for (int i = img.Height - 1; i >= 0; i--) { for (int j = 0; j < img.Width; j++) { array[num++] = bitmap.GetPixel(j, i).R; array[num++] = bitmap.GetPixel(j, i).G; array[num++] = bitmap.GetPixel(j, i).B; if (numberOfScalarComponents > 3) { array[num++] = bitmap.GetPixel(j, i).A; } } } Marshal.Copy(array, 0, vtkImageData.GetScalarPointer(), array.Length); return(vtkImageData); }