通过引用传递unsigned char*

Mat*_*oal 0 c objective-c

HI!我创建了一个函数来获取图像的灰度版本,但我试图通过引用传递此函数生成的位的目标时遇到问题:

void grayscale (const unsigned char *source, unsigned char **dest, int data_size) {

    for (int i=0; i < data_size; i= i+4) {
        int gray = (source[i] + source[i+1] + source[i+2]) / 3;
        gray = 255 - (int)cos(source[i])*255;
        *dest[i] = (char)gray;
        *dest[i + 1] = (char)gray;
        *dest[i + 2] = (char)gray; //HERE AN ERROR 
        *dest[i + 3] = (char)255;
    }
}
Run Code Online (Sandbox Code Playgroud)

我用这个函数调用:

grayscale(source, &destination, width*height*4 );
Run Code Online (Sandbox Code Playgroud)

指针有问题吗?(我正在研究目标C,我获得了EXC_BAD_ACCESS).

谢谢

Pau*_*l R 5

目前尚不清楚为什么要使用额外的间接级别dest,因为*dest没有被修改,但很可能你需要做以下事情 - 更改:

    *dest[i] = (char)source[i];
    *dest[i + 1] = (char)gray;
    *dest[i + 2] = (char)gray;
    *dest[i + 3] = (char)255;
Run Code Online (Sandbox Code Playgroud)

至:

    (*dest)[i] = (char)source[i];
    (*dest)[i + 1] = (char)gray;
    (*dest)[i + 2] = (char)gray; 
    (*dest)[i + 3] = (char)255;
Run Code Online (Sandbox Code Playgroud)

其原因是运算符优先级/关联性.

如果没有看到调用代码也很难说,但我猜你可能需要改变:

    (*dest)[i] = (char)source[i];
Run Code Online (Sandbox Code Playgroud)

至:

    (*dest)[i] = (char)source[i / 4];
Run Code Online (Sandbox Code Playgroud)

如果您正在尝试将单个平面图像转换为RGBA.