Я написал этот код, который должен быть NSLog для всех небелых пикселей в качестве теста, прежде чем идти дальше.Чтение пикселей из результатов UIImage в BAD_ACCESS
Это мой код:
UIImage *image = [UIImage imageNamed:@"image"];
CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
if(!pixelData) {
return;
}
const UInt8 *buffer = CFDataGetBytePtr(pixelData);
CFRelease(pixelData);
for(int y = 0; y < image.size.height; y++) {
for(int x = 0; x < image.size.width; x++) {
int pixelInfo = ((image.size.width * y) + x) * 4;
UInt8 red = buffer[pixelInfo];
UInt8 green = buffer[(pixelInfo + 1)];
UInt8 blue = buffer[pixelInfo + 2];
UInt8 alpha = buffer[pixelInfo + 3];
if(red != 0xff && green != 0xff && blue != 0xff){
NSLog(@"R: %hhu, G: %hhu, B: %hhu, A: %hhu", red, green, blue, alpha);
}
}
}
По какой-то причине, когда я построить приложение, он перебирает на мгновение, а затем бросает BAD_ACCESS
ошибку на линии: UInt8 red = buffer[pixelInfo];
. В чем может быть проблема?
Является ли это самым быстрым методом для итерации через пиксели?
Я запустил приведенный выше фрагмент, и это не дало мне никакой ошибки, используя изображение размером 75 × 35 пикселей. Я добавил, что код в View был загружен. –
Мое изображение намного больше, но это не должно быть проблемой :( – Fengson