обработка изображений (общая) - PullRequest
1 голос
/ 28 ноября 2011

Извините за глупый вопрос, но я новичок в этом, и я не мог найти ответы.

  1. Что такое шаг по изображению?
  2. Я создаю буферный байт [] из битового кадра (проблем нет.) Ширина битового кадра равна 1200, высота битового кадра равна 900. Поэтому (как я подозреваю) буфер должен быть 1200 * 900 = 108,0000. Но размер буфера является шагом * высота = 432,0000 (4 * 108,0000).

Stride вычисляется как bitFrame.PixelWidth * ((bitFrame.Format.BitsPerPixel + 7) / 8); Затем я использую bitFrame.CopyPixels(pixels, stride, 0); //(byte[] pixels) И у меня естьфункция обработки текущего пикселя (то есть структура.)

struct pixel {
    float r;
    float g;
    float b;
};

И есть также функция обработки пикселей pixel processPixel(int x, int y).Как я мог использовать эту функцию с моим буфером?Я думаю, что это должно быть названо как-то так:

for(int i = 0; i < height; i++) {
  for(int j = 0; j < height; j++) {
    processPixel(i, j); 
    // But how could I use this function with my byte[] buffer?
    // And what exactly in this buffer? 
    // (why stride*height = 4*width*height? cause there are 3 values for pixel RGB)
  }
}

1 Ответ

0 голосов
/ 28 ноября 2011

Stride - это количество байтов на строку пикселей независимо от того, сколько из этих пикселей является частью изображения, поэтому вам нужно использовать шаг при расчете, какие байты влияют на основе двумерных координат:

void processPixel(int x, int y)
{
    // This is if your image format is 4 bytes per pixel such as RGBA
    int startByteIndex = x * 4 + y * stride; 
}

Изменить: Я был слишком спешил - ответ обновляется на основе комментариев.

...