Как получить данные пикселей с изображения, снятого на iphone - PullRequest
0 голосов
/ 22 января 2012

проблема не в получении данных пикселей, я смог найти какой-то источник для этого

-(NSArray *)getRGBAtLocationOnImage:(UIImage *)theImage X:(int)x Y:(int)y
{
    // First get the image into your data buffer
    CGImageRef image = [theImage CGImage];
    NSUInteger width = CGImageGetWidth(image);
    NSUInteger height = CGImageGetHeight(image);

    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),image);
    CGContextRelease(context);

    // Now your rawData contains the image data in the RGBA8888 pixel format.
    int byteIndex = (bytesPerRow * y) + x * bytesPerPixel;
    int red = rawData[byteIndex];
    int green = rawData[byteIndex + 1];
    int blue = rawData[byteIndex + 2];
    //int alpha = rawData[byteIndex + 3];

    NSLog(@"Red: %d   Green: %d    Blue: %d",red,green,blue);

    NSArray *i = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:red], [NSNumber numberWithInt:green], [NSNumber numberWithInt:blue], nil];

    free(rawData);
    return i;
}

проблема в том, где я хочу получить пиксели. я понятия не имею, как выяснить, где находятся пиксели, которые я хочу получить. как это выяснить?

1 Ответ

0 голосов
/ 22 января 2012

Не обязательно понять вашу проблему, но ...

Взгляните на ваш метод:

-(NSArray *)getRGBAtLocationOnImage:(UIImage *)theImage X:(int)x Y:(int)y {
    // Your method
}

Он ожидает x и y и возвращает i, массив, содержащийRGB-данные точки (x, y), которую вы прошли.

Предположим, что у вас есть изображение 100x100 пикселей, вы должны вызывать свой метод 10000 раз (по одному на пиксель), если вы хотите проверить все пиксели в вашемimage.

В этом случае вы можете попробовать что-то вроде этого:

NSMutableArray *RGBImage = [[NSMutableArray alloc] initWithObjects:nil];
    for (int k = 0; k < IMAGE_WIDTH; k++) {
        for (j = 0; j < IMAGE_HEIGHT; j++) {
            NSArray *RGBPixel = [self getRGBAtLocationOnImage:theImage X:k Y:j]
            [RGBImage addObject:RGBPixel];
        }
    }
...