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

            Marshal.Copy(array, 0, vtkImageData2.GetScalarPointer(), array.Length);
            return vtkImageData2;
        }