2012-01-22 2 views
-1

проблемы разве получения данных пикселя я был в состоянии найти источник для этогоКак получить пиксельные данные от изображения, полученного с помощью Iphone

-(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; 
} 

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

+4

Ну - если вы не знаете, какие пиксели вы хотите, что вы ожидаете? –

+1

Что именно вы хотите достичь? В этом примере кода вы передаете 'x' и' y', так что позиция известна заранее. Какая у вас информация, которую вы хотите преобразовать в позицию? –

+0

проблема в том, что я не знаю, х и у перед рукой. Я получаю изображение с камеры. сразу после того, как снимок сделан, я распечатываю высоту и ширину. значение 3264 x 2448, я распечатываю значение снова после создания CGimageRef, и они меняются на противоположные. значение 2448 x 3264. Почему это. – lufthansa747

ответ

0

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

Посмотрите на ваш метод:

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

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

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

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

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]; 
     } 
    } 
+0

Я знаю, что только хочу захватить, как 10 конкретных пикселей от изображения. проблема в том, что я не знаю, где эти пиксели. – lufthansa747

+0

Итак, вам нужно выяснить, что вы ищете ... Например, если вы ищете темные пиксели, вы можете проверить все свои изображения, как я предложил, а затем взять только те значения, которые вас интересуют. – Beppe

+0

Я попытался проверить их в фотомагазине, но – lufthansa747

Смежные вопросы