1

我试图通过数值增加/减少一定量的值来修改像素值(每通道 RGBA 8 位)。如何在 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 是 unsigned char 类型的数据缓冲区

4

2 回答 2

4

您可能超出分配缓冲区的末尾,这就是您遇到访问冲突的原因。这很可能意味着您的数学分配错误,或者您的 rawData 指针类型错误。

如果您正在访问加载的 UIImage 的原始数据,它可能会以只读方式映射到内存中。您很可能需要将数据复制到您分配的缓冲区中。

于 2009-08-30T06:24:19.000 回答
0

嗯...什么rawdata?也许这是const您无法修改的类型?

于 2009-08-30T06:16:36.973 回答