BitmapSource.CopyPixels - что хорошего для шага?

Я пытаюсь получить данные пикселей из WPF BitmapSource объект. Как я понимаю, это можно сделать, позвонив CopyPixels метод. Этот метод нуждается в параметре шага, который я не знаю, как получить. Насколько я знаю, шаг - это значение, которое используется при переходе в массив во время чтения или копирования. Что будет подходящим значением шага для любого BitmapSource?

3 ответа

Решение

Вы можете использовать значение stride = pixel_size * image_width. Например, для растрового изображения RGBA с шириной 100 пикселей штрих = 400.

Некоторые приложения могут требовать специального выравнивания линий. Например, для растровых изображений Windows GDI требуется выравнивание 32-битных строк. В этом случае для растрового изображения RGB с шириной = 33 значение шага 33*3=99 должно быть изменено на 100, чтобы иметь 32-разрядное выравнивание строк в массиве назначения.

Как правило, вы должны знать требования к массиву назначения. Там нет особых требований, используйте по умолчанию pixel_size * image_width.

var stride = ((bitmapSource.PixelWidth * bitmapSource.Format.BitsPerPixel + 31) / 32) * 4;

или же

var stride = ((bitmapSource.PixelWidth * bitmapSource.Format.BitsPerPixel + 31) >> 5) << 2;

int stride = (int)(bitmapSource.PixelWidth * bitmapSource.Format.BitsPerPixel + 7) / 8;

Другие вопросы по тегам