【发布时间】:2016-12-19 11:00:00
【问题描述】:
我编写了这段代码,它应该在继续之前对所有非白色像素进行 NSLog 测试。
这是我的代码:
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];。可能是什么问题?
这是迭代像素的最快方法吗?
【问题讨论】:
-
我运行了上面的 sn-p 并且使用 75 × 35 像素的图像没有给我任何错误。我在 View 中添加了代码确实加载了。
-
我的图像要大得多,但这应该不是问题:(
标签: ios objective-c uiimage