Я не проверял это, но оно должно работать. image
является UIImage
. for
проходит по изображению и извлекает значения RGBA для каждого пикселя. Вы можете просто удалить цикл и заменить xx
и yy
вашей координатой, чтобы получить один пиксель.
CGImageRef imageRef = [image CGImage];
NSUInteger width = CGImageGetWidth(imageRef);
NSUInteger height = CGImageGetHeight(imageRef);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char *rawData = malloc(height * width * 4);
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * width;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
CGContextRelease(context);
// this loops through all the pixels
for(int yy = 0; yy<height; yy++) {
for(int xx = 0; xx<width; xx++) {
int byteIndex = (bytesPerRow * yy) + xx * bytesPerPixel;
short r = rawData[byteIndex];
short g = rawData[byteIndex + 1];
short b = rawData[byteIndex + 2];
short a = rawData[byteIndex + 3];
}
}
free(rawData);