图像处理(一般)

时间:2011-11-28 09:35:45

标签: c# image-processing stride

对于假问题我很抱歉,但我是新手,我找不到答案。

  1. 什么是图像步幅?
  2. 我正在从Bitframe创建缓冲区byte [](没有问题。)位帧宽度为1200,位帧高度为900.所以(我怀疑)缓冲区必须是1200 * 900 = 108,0000。 但是缓冲区大小是stride * height = 432,0000(4 * 108,0000)。
  3. 步幅计算为bitFrame.PixelWidth * ((bitFrame.Format.BitsPerPixel + 7) / 8); 然后我使用bitFrame.CopyPixels(pixels, stride, 0); //(byte[] pixels)并且我具有处理当前像素(即结构)的功能。

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

    还有像素处理函数像素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 :(得分:0)

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; 
}

编辑:我太匆忙了 - 根据评论回答更新。