我正在尝试通过数字增加/减少一定数量的值来修改像素值(每个通道8位RGBA)。在Objective-C或C中,我如何做到这一点?以下代码每次都会生成一个“错误:EXC_BAD_ACCESS”。

// Try to Increase RED by 50
    for(int i = 0; i < myLength; i += 4) {

        //NSLog prints the values FINE as integers
            NSLog(@"(%i/%i/%i)", rawData[i], rawData[i+1], rawData[i+2]);

            //But for some reason I cannot do this
        rawData[i]+=50;

}

甚至
// Try to set RED to 50
    for(int i = 0; i < myLength; i += 4) {

            //I cannot even do this...
        unsigned char newVal = 50;
        rawData[i] = 50;

}

旁注:rawData是无符号字符类型的数据缓冲区

最佳答案

有可能是您的缓冲区分配的末尾溢出了,这就是为什么您会遇到访问冲突。这很可能意味着您的数学分配错误,或者您的rawData指针类型错误。
如果您正在访问加载的UIImage的原始数据,则它可能被映射为只读内存。很可能需要将数据复制到分配的缓冲区中。

关于iphone - 如何增加/减少未签名的字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1353209/

10-09 07:12