我创建了一个 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 -> getPixel(x,y) ????
最佳答案
假设你的图片数据有这样的布局
- 像素是每条扫描线的扫描线,从左到右
- 一个像素被打包为 RGB,或者最终是 RGBA
- 每个像素使用 pixelSize 字节(可能是 3,如果是 alpha channel 则可能是 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
}
}
关于c++ - 从 uint8 c++ 获取 RGB 像素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8297029/