Par exemple, supposons que je veuille détecter la couleur du pixel dont les coordonnées d'écran sont (100, 200). Existe-t-il un moyen de le faire ?
EDIT -- Je ne m'inquiète pas des problèmes d'affichage de la rétine pour l'instant.
Par exemple, supposons que je veuille détecter la couleur du pixel dont les coordonnées d'écran sont (100, 200). Existe-t-il un moyen de le faire ?
EDIT -- Je ne m'inquiète pas des problèmes d'affichage de la rétine pour l'instant.
Ce n'est peut-être pas le chemin le plus direct, mais vous pouvez le faire :
Utilisez UIGraphicsBeginImageContextWithOptions pour saisir l'écran (voir le document Apple Q&A QA1703 - " Capture d'écran dans les applications UIKit ").
Ensuite, utilisez CGImageCreateWithImageInRect pour saisir la partie de l'image résultante dont vous avez besoin.
Enfin, analyser l'image résultante. Les choses se compliquent à ce stade, mais heureusement, il existe une question existante qui devrait vous montrer la voie : Comment obtenir les valeurs RVB d'un pixel d'une image sur l'iphone ?
Vous pouvez également consulter l'article de blog suivant, qui contient le code correspondant : De quelle couleur est mon pixel ? Sélecteur de couleurs basé sur l'image sur iPhone
Voici comment procéder
CGContextRef ctx;
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);
//GET PIXEL FROM POINT
int index = 4*((width*round(yCoor))+round(xCoor));
int R = rawData[index];
int G = rawData[index+1];
int B = rawData[index+2];
NSLog(@"%d %d %d", R, G, B);
//IF YOU WANT TO ALTER THE PIXELS
int byteIndex = 0;
for(int ii = 0 ; ii < width * height ; ++ii)
{
rawData[byteIndex] = (char)(newPixelValue);
rawData[byteIndex+1] = (char)(newPixelValue);
rawData[byteIndex+2] = (char)(newPixelValue);
byteIndex += 4;
}
ctx = CGBitmapContextCreate(rawData,
CGImageGetWidth( imageRef ),
CGImageGetHeight( imageRef ),
8,
CGImageGetBytesPerRow( imageRef ),
CGImageGetColorSpace( imageRef ),
kCGImageAlphaPremultipliedLast );
imageRef = CGBitmapContextCreateImage(ctx);
UIImage* rawImage = [UIImage imageWithCGImage:imageRef];
CGContextRelease(ctx);
image = rawImage;
free(rawData);
Essayez celui-ci où "self.m_imgvwSource" est le uiview/uiimageview selon vos besoins.
- (UIColor *) GetCurrentPixelColorAtPoint:(CGPoint)point
{
unsigned char pixel[4] = {0};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedLast);
CGContextTranslateCTM(context, -point.x, -point.y);
[self.m_imgvwSource.layer renderInContext:context];
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
NSLog(@"pixel: %d %d %d %d", pixel[0], pixel[1], pixel[2], pixel[3]);
UIColor *color = [UIColor colorWithRed:pixel[0]/255.0 green:pixel[1]/255.0 blue:pixel[2]/255.0 alpha:pixel[3]/255.0];
return color;
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.