16 "title" :
"VuoColorspace",
21 #import <AppKit/AppKit.h>
39 CGFloat components[5] = { c, m, y, k, a };
40 NSColor *inputColor = [NSColor colorWithColorSpace:NSColorSpace.genericCMYKColorSpace components:components count:5];
41 NSColor *outputColor = [inputColor colorUsingColorSpace:NSColorSpace.sRGBColorSpace];
42 return VuoColor_makeWithRGBA(outputColor.redComponent, outputColor.greenComponent, outputColor.blueComponent, outputColor.alphaComponent);
61 *k = 1. -
MAX(
MAX(r, g), b);
66 *c = (1. - r - *k) / (1. - *k);
67 *m = (1. - g - *k) / (1. - *k);
68 *y = (1. - b - *k) / (1. - *k);
74 CGFloat components[4] = { color.r, color.g, color.b, color.a };
75 NSColor *inputColor = [NSColor colorWithColorSpace:NSColorSpace.sRGBColorSpace components:components count:4];
76 NSColor *outputColor = [inputColor colorUsingColorSpace:NSColorSpace.genericCMYKColorSpace];
77 *c = outputColor.cyanComponent;
78 *m = outputColor.magentaComponent;
79 *y = outputColor.yellowComponent;
80 *k = outputColor.blackComponent;
81 *a = outputColor.alphaComponent;
85 static NSColorSpace *_VuoColorspace_colorspaceForInteger(
VuoInteger colorspace)
88 return [NSColorSpace.sRGBColorSpace retain];
89 else if (colorspace == 1)
90 return [NSColorSpace.adobeRGB1998ColorSpace retain];
91 else if (colorspace == 2)
92 return [NSColorSpace.genericRGBColorSpace retain];
93 else if (colorspace == 3)
94 return [NSColorSpace.genericCMYKColorSpace retain];
95 else if (colorspace == 4)
96 return [[NSColorSpace alloc] initWithICCProfileData:[NSData dataWithContentsOfFile:@"/System/Library/ColorSync/Profiles/Generic Lab Profile.icc"]];
97 else if (colorspace == 5)
98 return [[NSColorSpace alloc] initWithICCProfileData:[NSData dataWithContentsOfFile:@"/System/Library/ColorSync/Profiles/Generic XYZ Profile.icc"]];
103 static NSColorSpace *_VuoColorspace_colorspaceForData(
VuoData colorspace)
105 if (!colorspace.
data || colorspace.
size <= 0)
108 NSData *data = [NSData dataWithBytesNoCopy:colorspace.data length:colorspace.size freeWhenDone:NO];
112 return [[NSColorSpace alloc] initWithICCProfileData:data];
119 VUserLog(
"Error: Couldn't load colorspace.");
124 unsigned long allowedComponentCount = cs.numberOfColorComponents + 1;
125 CGFloat cfComponents[allowedComponentCount];
126 for (
int i = 0; i < allowedComponentCount - 1; ++i)
128 cfComponents[allowedComponentCount - 1] = 1;
129 for (
int i = 0; i <
MIN(providedComponentCount, allowedComponentCount); ++i)
132 NSColor *inputColor = [NSColor colorWithColorSpace:cs components:cfComponents count:allowedComponentCount];
134 NSColor *outputColor = [inputColor colorUsingColorSpace:NSColorSpace.sRGBColorSpace];
135 return VuoColor_makeWithRGBA(outputColor.redComponent, outputColor.greenComponent, outputColor.blueComponent, outputColor.alphaComponent);
145 return _VuoColorspace_convertFromICC(_VuoColorspace_colorspaceForInteger(colorspace), components);
154 return _VuoColorspace_convertFromICC(_VuoColorspace_colorspaceForData(colorspace), components);
161 VUserLog(
"Error: Couldn't load colorspace.");
165 NSColor *inputColor = [NSColor colorWithSRGBRed:color.r green:color.g blue:color.b alpha:color.a];
166 NSColor *outputColor = [inputColor colorUsingColorSpace:cs];
169 unsigned long componentCount = outputColor.numberOfComponents;
170 CGFloat outputComponents[componentCount];
171 [outputColor getComponents:outputComponents];
174 for (
int i = 0; i < componentCount; ++i)
187 return _VuoColorspace_convertToICC(_VuoColorspace_colorspaceForInteger(colorspace), color);
195 return _VuoColorspace_convertToICC(_VuoColorspace_colorspaceForData(colorspace), color);