【发布时间】:2014-02-26 19:23:49
【问题描述】:
在我的程序中,我将UIImage 的像素数据保存在一个基本的 C 数组中:
// It can be UInt8 as it is greyscaled, values can only be 0-255
@property (nonatomic, readwrite) UInt8 *imageData;
现在在我的灰度算法中我初始化它:
self.imageData = malloc(sizeof(UInt8) * width * height);
然后我以灰度填充数据。这行得通。然而,在后来的算法中,我通过一些魔法将值设为 0 或 255。我认为这很好……但是后来寻找这些值的算法得到了 1 和 3。所以我在将值从 0-255 更改为 0 或 255 后立即将其放入:
// Magic loop. Starts with current value at pixelIndex, gets curVal.
self.imageData[pixelIndex] = curVal;
NSAssert(self.imageData[pixelIndex] != curVal, @"Whattt");
你瞧,它实际上并没有改变我的数组的值。有什么我想念的吗?这些数组是一次性设置的,然后它们变成只读的吗?我知道 NSArrays 就是这样,但这只是一个简单的基于 C 指针的数组......或者它们是一样的吗?
不管是什么原因,我怎样才能正确地改变这些值?
【问题讨论】:
标签: ios objective-c c background-thread