16 "title" :
"VuoColorspace",
22 #ifndef NS_RETURNS_INNER_POINTER
23 #define NS_RETURNS_INNER_POINTER
25 #import <AppKit/AppKit.h>
26 #undef NS_RETURNS_INNER_POINTER
45 CGFloat components[5] = { c, m, y, k, a };
46 NSColor *inputColor = [NSColor colorWithColorSpace:NSColorSpace.genericCMYKColorSpace components:components count:5];
47 NSColor *outputColor = [inputColor colorUsingColorSpace:NSColorSpace.sRGBColorSpace];
48 return VuoColor_makeWithRGBA(outputColor.redComponent, outputColor.greenComponent, outputColor.blueComponent, outputColor.alphaComponent);
67 *k = 1. -
MAX(
MAX(r, g), b);
72 *c = (1. - r - *k) / (1. - *k);
73 *m = (1. - g - *k) / (1. - *k);
74 *y = (1. - b - *k) / (1. - *k);
80 CGFloat components[4] = { color.r, color.g, color.b, color.a };
81 NSColor *inputColor = [NSColor colorWithColorSpace:NSColorSpace.sRGBColorSpace components:components count:4];
82 NSColor *outputColor = [inputColor colorUsingColorSpace:NSColorSpace.genericCMYKColorSpace];
83 *c = outputColor.cyanComponent;
84 *m = outputColor.magentaComponent;
85 *y = outputColor.yellowComponent;
86 *k = outputColor.blackComponent;
87 *a = outputColor.alphaComponent;
91 static NSColorSpace *_VuoColorspace_colorspaceForInteger(
VuoInteger colorspace)
94 return [NSColorSpace.sRGBColorSpace retain];
95 else if (colorspace == 1)
96 return [NSColorSpace.adobeRGB1998ColorSpace retain];
97 else if (colorspace == 2)
98 return [NSColorSpace.genericRGBColorSpace retain];
99 else if (colorspace == 3)
100 return [NSColorSpace.genericCMYKColorSpace retain];
101 else if (colorspace == 4)
102 return [[NSColorSpace alloc] initWithICCProfileData:[NSData dataWithContentsOfFile:@"/System/Library/ColorSync/Profiles/Generic Lab Profile.icc"]];
103 else if (colorspace == 5)
104 return [[NSColorSpace alloc] initWithICCProfileData:[NSData dataWithContentsOfFile:@"/System/Library/ColorSync/Profiles/Generic XYZ Profile.icc"]];
109 static NSColorSpace *_VuoColorspace_colorspaceForData(
VuoData colorspace)
111 if (!colorspace.
data || colorspace.
size <= 0)
114 NSData *data = [NSData dataWithBytesNoCopy:colorspace.data length:colorspace.size freeWhenDone:NO];
118 return [[NSColorSpace alloc] initWithICCProfileData:data];
125 VUserLog(
"Error: Couldn't load colorspace.");
130 unsigned long allowedComponentCount = cs.numberOfColorComponents + 1;
131 CGFloat cfComponents[allowedComponentCount];
132 for (
int i = 0; i < allowedComponentCount - 1; ++i)
134 cfComponents[allowedComponentCount - 1] = 1;
135 for (
int i = 0; i <
MIN(providedComponentCount, allowedComponentCount); ++i)
138 NSColor *inputColor = [NSColor colorWithColorSpace:cs components:cfComponents count:allowedComponentCount];
140 NSColor *outputColor = [inputColor colorUsingColorSpace:NSColorSpace.sRGBColorSpace];
141 return VuoColor_makeWithRGBA(outputColor.redComponent, outputColor.greenComponent, outputColor.blueComponent, outputColor.alphaComponent);
151 return _VuoColorspace_convertFromICC(_VuoColorspace_colorspaceForInteger(colorspace), components);
160 return _VuoColorspace_convertFromICC(_VuoColorspace_colorspaceForData(colorspace), components);
167 VUserLog(
"Error: Couldn't load colorspace.");
171 NSColor *inputColor = [NSColor colorWithSRGBRed:color.r green:color.g blue:color.b alpha:color.a];
172 NSColor *outputColor = [inputColor colorUsingColorSpace:cs];
175 unsigned long componentCount = outputColor.numberOfComponents;
176 CGFloat outputComponents[componentCount];
177 [outputColor getComponents:outputComponents];
180 for (
int i = 0; i < componentCount; ++i)
193 return _VuoColorspace_convertToICC(_VuoColorspace_colorspaceForInteger(colorspace), color);
201 return _VuoColorspace_convertToICC(_VuoColorspace_colorspaceForData(colorspace), color);