Stride - это низкоуровневая деталь реализации того, как строки растрового изображения располагаются в памяти. Шаг относится к ряду пикселей в соответствии с требованием, чтобы шаг должен быть достаточно большим для хранения всей строки пикселей, но может быть больше. Как указывает Клеменс, совершенно справедливо произвольно увеличивать шаг; разница приводит к выравниванию или заполнению байтов, которые исторически добавляются по причинам скорости .
Поскольку обе ваши формулы удовлетворяют этому требованию, обе верны: первая добавляется в память для каждой строки пикселей таким образом, что он выравнивается по 32-битной границе, а второй выравнивает каждую строку по 8-битной границе. Но оба из них приводят к шагу, который достаточно большой, чтобы вместить весь ряд пикселей.
32-битовые выравнивания, вероятно, все еще используются в. пиксели копируются в памяти.
EmguCV Mat
, с другой стороны, является чем-то совершенно другим; это матрица общего назначения, и она не должна соответствовать тем соглашениям о растровых изображениях, которые используются. NET. Документация на этой странице предполагает, что никакие байты заполнения или Формула B не являются поведением по умолчанию. Эта перегрузка конструктора позволяет указать пользовательский шаг, однако вам необходимо указать его на заранее определенный буфер:
var buffer = Marshal.AllocHGlobal(2585 * 8380);
var m = new Mat(2585, 2793, DepthType.Cv8U, 3, buffer, 8380);
int matStride = m.Step; //8380
Marshal.FreeHGlobal(buffer);