从uint8 c ++获取RGB像素值

时间:2011-11-28 14:09:20

标签: c++ image-processing

我创建了一个c#函数,它将BitmapFrame图片移动到byte [](使用copypixels)。然后我将这个缓冲区粘贴到c ++ dll中,它是uint8 *。 cpp中有一个结构

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

是否可以为这个uint8 *缓冲区组织一个循环来逐个像素地获取(例如x y - 图像的高度和宽度(这个数据我也有))?  

之类的东西
for(i=0; i< height;i++)
{
for(j=0; j <width;j++)
{
   SomeWorkWithPixelsfromUint8(i,j) //???
}
}

SomeWorkWithPixelsfromUint8(i,j)可以操作RGB结构

如此简单的uint8 - &gt; getPixel(x,y)????

1 个答案:

答案 0 :(得分:1)

假设您的图片数据有这样的布局

  • 像素是每条扫描线的扫描线,从左到右
  • 一个像素打包为RGB,或最终打包为RGBA
  • 每个像素使用 pixelSize 字节(如果你是alpha通道,可能是3,可能是4)

uint8_t* picData = ...;

uint8_t* pixel = picData;
for(int i = 0; i < height; ++i) {
  for(int j = 0; j < width; ++j, pixel += pixelSize) {
       float r = pixel[0];
       float g = pixel[1];
       float b = pixel[2];
       // Do something with r, g, b
  }
}