Convirtiendo espacios de color en Objective-C
¿Cómo puedo convertir del espacio de color del dispositivo al espacio RGB calibrado? Por favor, intente hacer cambios en el siguiente código:
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];
return color;
}
Obtuve el código de esta publicación: aquí.
Encontré una respuesta para Swift aquí, soy bastante nuevo en Swift y ni siquiera la documentación me ha ayudado.
Actualización
Logré llegar con el siguiente código:
// 'color' es el color de la función
// 'bitmapRep' apunta a un NSBitmapImageRep
CGFloat* components = malloc(color.numberOfComponents * sizeof(CGFloat));
[color getComponents:components];
NSColor* correctedcolor = [NSColor colorWithColorSpace:[self.bitmapRep colorspace]
components:components count:colorbmp.numberOfComponents];
free(components);
[correctedcolor colorUsingColorSpace:[NSColorSpace sRGBColorSpace]];
return correctedcolor;
Incluso al intentar este fragmento de código, no obtenía el color de píxel correcto. Intenté usar un selector de color de Appstore, que mostraba un valor diferente al que se leía en mi aplicación.
Ejemplo al seleccionar un color rojo puro:
Selector de color comercial: 0xFF0000
Mi selector de color: 0xFF0404
¿Cómo puedo obtener el valor calibrado correcto del píxel seleccionado?
davy.ai
Para convertir del espacio de color del dispositivo al espacio RGB calibrado, puedes modificar el código existente de la siguiente manera:
Este código convierte el espacio de color de la representación de imagen del bitmap desde el espacio de color predeterminado (probablemente dependiente del dispositivo) al espacio de color RGB del dispositivo estándar. Luego, recupera el color en el píxel deseado y lo convierte al espacio de color RGB calibrado utilizando el método
colorUsingColorSpace:
.Sin embargo, el color calculado puede no coincidir con el color esperado debido a variaciones en la gestión del color entre diferentes aplicaciones y sistemas operativos. La discrepancia entre el selector de color comercial y el código personalizado podría ser debido a diferencias en la configuración de gestión del color o a los propios algoritmos del selector de color para obtener los valores de color. Puede ser necesaria más pruebas y calibración para obtener valores de color precisos.