Как передать массив двумерных пикселей в BitmapSource.Create ()? - PullRequest
2 голосов
/ 17 октября 2011

У меня есть двумерный массив байтовых пикселей, из которого я хочу создать BitmapSource. Учитывая, что BitmapSource.Create () требует 1D массива плюс шаг, как мне передать мой 2D массив?

Мое текущее решение - использовать BlockCopy для копирования в промежуточный массив 1D:

int width = pixels2D.GetLength(1); int height = pixels2D.GetLength(0);
byte[] pixels1D = new byte [width * height ];
Buffer.BlockCopy(pixels2D, 0, pixels1D, 0, pixels1D.Length * sizeof(byte));
return BitmapSource.Create(width, height, 96, 96, System.Windows.Media.PixelFormats.Gray8,
                        null, pixels1D, stride: width * sizeof(byte));

но это зависит от того, что, как я понимаю, является неопределенной упаковкой размеров массива. Я хотел бы решение, которое избегает этого, и в идеале избегает копирования данных. Спасибо.

1 Ответ

1 голос
/ 26 декабря 2017

Насколько мне известно, есть три способа реализации этого:

1) Block Copy ,, что эффективно 100

2) For loop , для копирования pixels2D[i,j] в pixels1D[i*width+j], что также эффективно;

3) Linq, pixels2D.Cast<byte>().ToArray(), что просто, но медленно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...