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;