Comment lire datatables de pixel RVB sur iPhone

Je me request comment je peux numériser une image sur l'iPhone et parsingr la valeur RGB de chaque pixel, ce qui détermine finalement le RVB moyen pour l'set de l'image. Si quelqu'un pouvait me pousser dans la bonne direction, ce serait grandement apprécié. Je suis novice en parsing d'image et je ne sais pas par où commencer, ou si quelque chose comme ceci est inclus dans les API iOS 5.

Il suffit de le coller, je détecte la couleur au toucher.

- (void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event { if (self.view.hidden==YES) { //color wheel is hidden, so don't handle this as a color wheel event. [[self nextResponder] touchesEnded:touches withEvent:event]; return; } UITouch* touch = [touches anyObject]; CGPoint point = [touch locationInView:self.view]; //where image was tapped UIColor * lastColor = [self getPixelColorAtLocation:point]; NSLog(@"color %@",lastColor); UIImageView *lbl=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)]; lbl.layer.cornerRadius=50; [imageView addSubview:lbl]; lbl.backgroundColor=lastColor; lbl.center=CGPointMake(stillImageFilter.center.x*320, (stillImageFilter.center.y*320)-125); NSLog(@"stillImageCenter = %f,%f",stillImageFilter.center.x,stillImageFilter.center.y);} - (UIColor*) getPixelColorAtLocation:(CGPoint)point { UIColor* color = nil; CGImageRef inImage = imageView.image.CGImage; CGContextRef cgctx = [self createARGBBitmapContextFromImage:inImage]; if (cgctx == NULL) { return nil; /* error */ } size_t w = CGImageGetWidth(inImage); size_t h = CGImageGetHeight(inImage); CGRect rect = {{0,0},{w,h}}; CGContextDrawImage(cgctx, rect, inImage); unsigned char* data = CGBitmapContextGetData (cgctx); if (data != NULL) { int offset = 4*((w*round(point.y))+round(point.x)); int alpha = data[offset]; int red = data[offset+1]; int green = data[offset+2]; int blue = data[offset+3]; NSLog(@"offset: %i colors: RGB A %i %i %i %i",offset,red,green,blue,alpha); color = [UIColor colorWithRed:(red/255.0f) green:(green/255.0f) blue:(blue/255.0f) alpha:(alpha/255.0f)]; } CGContextRelease(cgctx); if (data) { free(data); } return color; 

}

 - (CGContextRef) createARGBBitmapContextFromImage:(CGImageRef) inImage { CGContextRef context = NULL; CGColorSpaceRef colorSpace; void * bitmapData; int bitmapByteCount; int bitmapBytesPerRow; size_t pixelsWide = CGImageGetWidth(inImage); size_t pixelsHigh = CGImageGetHeight(inImage); bitmapBytesPerRow = (pixelsWide * 4); bitmapByteCount = (bitmapBytesPerRow * pixelsHigh); colorSpace = CGColorSpaceCreateDeviceRGB(); if (colorSpace == NULL) { fprintf(stderr, "Error allocating color space\n"); return NULL; } bitmapData = malloc( bitmapByteCount ); if (bitmapData == NULL) { fprintf (stderr, "Memory not allocated!"); CGColorSpaceRelease( colorSpace ); return NULL; } context = CGBitmapContextCreate (bitmapData, pixelsWide, pixelsHigh, 8, // bits per component bitmapBytesPerRow, colorSpace, kCGImageAlphaPremultipliedFirst); if (context == NULL) { free (bitmapData); fprintf (stderr, "Context not created!"); } CGColorSpaceRelease( colorSpace ); return context; 

}

Regardez les sujets de programmation de camera pour iOS – Prendre des photos et des films cela va get l'image dans votre application.

Après cela, regardez quelque chose comme: comment-get-les-valeurs-rgb-pour-un-pixel-sur-une-image-sur-l'-iphone

Obtenir le CGImage d'un UIImage peut vous donner ces données

 CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage)); const UInt8* data = CFDataGetBytePtr(pixelData); int pixelInfo = ((image.size.width * y) + x ) * 4; // The image is png UInt8 red = data[pixelInfo]; UInt8 green = data[(pixelInfo + 1)]; UInt8 blue = data[pixelInfo + 2]; UInt8 alpha = data[pixelInfo + 3]; CFRelease(pixelData); 

Plus ici: Obtenir des données de pixel de UIImageView – fonctionne sur simulateur, pas appareil

Et ici: Obtenez la couleur Pixel de UIImage