0

在我的程序中,我将 a 的像素数据保存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 指针的数组......或者它们是一样的吗?

不管是什么原因,我怎样才能使它正确地改变这些值?

4

1 回答 1

2

这应该可以正常工作。我认为你的问题只是你的断言倒退了——条件应该是一个你想要为true的表达式,所以目前你在断言“在我设置self.imageData[pixelIndex]为之后curVal,它不应该等于curVal”。相反,应该是:

NSAssert(self.imageData[pixelIndex] == curVal, @"Whattt");

顺便说一句,在做这种断言时,我总是认为包含预期值和实际值是有帮助的,这样你就可以看到发生了什么。在这种情况下,您可以这样做:

NSAssert3(self.imageData[pixelIndex] == curVal, @"Image data at pixel index %d should have been %d, but instead was %d", pixelIndex, curVal, self.imageData[pixelIndex]);

这将使值实际上相等并且在您的相等性检查中出现问题时更加明显。

于 2014-02-26T19:34:22.577 回答