В MSDN я нашел this для определения шага изображения. Короче говоря, это ширина в байтах одной строки в буфере.Stride и buffersize при обработке изображений
Теперь у меня есть изображение RGB в аналогичном буфере, и мне дали шаг и ширину изображения в пикселях, и я хочу знать, сколько добавленных байтов было добавлено.
Это просто шаг - 3 * ширина изображения, так как у меня есть 3 байта (RGB) на пиксель?
unsafe private void setPrevFrame(IntPtr pBuffer)
{
prevFrame = new byte[m_videoWidth, m_videoHeight, 3];
Byte* b = (byte*) pBuffer;
for (int i = 0; i < m_videoWidth; i++)
{
for (int j = 0; j < m_videoHeight; j++)
{
for (int k = 0; k < 3; k++)
{
prevFrame[i,j,k] = *b;
b++;
}
}
b += (m_stride - 3 * m_videoHeight);
}
}
Это последняя строка кода я не уверен
поэтому W * 3 + 3? и он утверждает, что для двух изображений одного и того же размера пикселя могут иметь разные шаги, поэтому не следует включать эту переменную? – Don
Почему W * 3 + 3? Я думаю, что они означают 2 изображения с разными байтами на пиксель. Шаг AFAIK дополняется границей 4 байта, поэтому он должен быть идентичным для изображений с одинаковой шириной и байтами на пиксель. Помните, что шаг также может быть отрицательным, что указывает на то, что изображение расположено снизу вверх. – Rotem
по соображениям производительности, я использую буфер Byte *, и мне нужно пройти через все пиксели. Итак, у меня есть 3 forloops (один для высоты, один для ширины и один для RGB), где я это делаю: Pointer + = m_stride - 3 * m_height С вашим объяснением, я вижу, что это неправильный подход, но я не совсем уверен как решить проблему тогда, если изображение может быть upsidedown ... – Don