Я понял это (вау ... вроде не могу поверить, что я потратил что-то около часа, возиться с этим!).Проблема заключалась в том, что байтовый массив должен иметь размер
sourceImage.PixelHeight * stride
, где
int stride = (int)((sourceImage.PixelWidth * sourceImage.Format.BitsPerPixel + 7) / 8);
Причина, по которой он работал в другом месте в моем коде, заключается в том, что вместо копирования пикселейдля всего изображения (как я пытаюсь сделать там, где у меня возникла проблема), я копировал только пиксели одной строки ... то есть, в основном, область 2008 x 1, так что размер места назначенияМассив байтов может быть ровно 2208, и он будет работать нормально.Для дальнейшего использования, вероятно, следует использовать что-то подобное более или менее:
int width = source.PixelWidth;
int height = source.PixelHeight;
int stride = width * ((source.Format.BitsPerPixel + 7) / 8);
byte[] bits = new byte[height * stride];
source.CopyPixels(bits, stride, 0);
Приветствия!