2014-02-26 3 views
0

나는 기본 C 배열에 UIImage의 픽셀 데이터를 보유하고 있습니다 : 내 greyscaling 알고리즘 이제배열의 값을 변경할 수 없습니까? 내 프로그램에서

// 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 포인터 기반의 배열이다 ... 아니면 똑같은가?

이유가 무엇이든간에이 값을 올바르게 변경할 수 있도록하려면 어떻게해야합니까?

답변

2

정상적으로 작동합니다. 귀하의 문제는 당신이 당신의 주장을 거꾸로 가지고 있다는 것입니다 - 조건은 이 되길 원하는 표현이되어야하므로 현재 "self.imageData[pixelIndex]curVal으로 설정 한 후에는 같지 않아야합니다 curVal. " 대신, 그것은해야한다 : 주장이 일종의을 할 때

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

이 BTW, 난 항상 당신이 무슨 일이 일어나고 있는지 볼 수 있도록이 예상과 실제 값을 포함하는 것이 도움 생각합니다. 이 경우 다음을 수행 할 수 있습니다.

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

이렇게하면 값이 실제로 평등하고 평등 검사에서 잘못된 점이 더 분명해집니다.

+0

아 .. 젠장. 디버깅 드로잉 보드로 돌아와서 고마워요! – Alex