J'essaie de créer une application de cueilleur de couleurs dans l'objectif-c afin que je puisse obtenir la couleur de n'importe quel pixel sur mon écran. Y at-il un moyen d'obtenir la couleur d'un certain pixel d'écran dans l'objectif-c?Obtenir la couleur d'un pixel sur l'écran dans l'application cacao objective-c
Répondre
Vous pouvez utiliser CGDisplayCreateImageForRect pour obtenir un CGImageRef qui englobe le point qui vous intéresse. Une fois que vous avez une CGImage, vous pouvez en extraire une valeur de couleur en la rendant dans un tampon personnalisé ou en utilisant initWithCGImage de NSBitmapImageRep. puis colorAtX: y :. Le code « écrit dans la fenêtre de code de débordement de pile » pour la méthode NSBitmapImageRep ressemblerait à quelque chose comme:
NSColor *MyColorAtScreenCoordinate(CGDirectDisplayID displayID, NSInteger x, NSInteger y) {
CGImageRef image = CGDisplayCreateImageForRect(displayID, CGRectMake(x, y, 1, 1));
NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCGImage:image];
CGImageRelease(image);
NSColor *color = [bitmap colorAtX:0 y:0];
[bitmap release];
}
qui renverra probablement la couleur dans l'espace couleur de l'appareil. Il peut être utile de renvoyer la couleur dans l'espace colorimétrique RBG calibré à la place.
Essayez NSReadPixel. Vous devez obtenir l'emplacement actuel de la souris et le convertir en un cadre de référence de coordonnées approprié. Une fois que vous avez la couleur, vous devrez peut-être le convertir en un espace de couleur différent, en fonction de vos besoins.
Cela fonctionnera pour les vues et les fenêtres de votre espace d'adressage sur lesquelles vous avez verrouillé le focus, mais vous ne pourrez pas lire les pixels d'écran provenant d'autres processus. –
Il devrait être [bitmap colorAtX: 0 y: 0] Je crois. –
Oui, il devrait être 0, 0. Pourtant, "écrit dans la fenêtre de code de débordement de pile". –