Skip to content

Instantly share code, notes, and snippets.

@seebq
Created May 2, 2013 21:47
Show Gist options
  • Save seebq/5505741 to your computer and use it in GitHub Desktop.
Save seebq/5505741 to your computer and use it in GitHub Desktop.
Simple RGB to CMYK (0-255) ranges
/*
Based on: http://www.rapidtables.com/convert/color/rgb-to-cmyk.htm
*/
#include <stdio.h>
#include <math.h>
typedef struct RGB_t { unsigned char red, green, blue; } RGB;
typedef struct CMYK_t { unsigned char cyan, magenta, yellow, black; } CMYK;
void RgbToCMYK(struct RGB_t rgb, struct CMYK_t* outCmyk)
{
float r, g, b;
float c, m, y, k;
r = rgb.red / 255.0f;
g = rgb.green / 255.0f;
b = rgb.blue / 255.0f;
k = 1 - fmaxf(fmaxf(r, g), b);
c = (1 - r - k) / (1 - k);
m = (1 - g - k) / (1 - k);
y = (1 - b - k) / (1 - k);
outCmyk->cyan = c * 255;
outCmyk->magenta = m * 255;
outCmyk->yellow = y * 255;
outCmyk->black = k * 255;
}
int main()
{
struct RGB_t rgb = { 132, 34, 255};
struct CMYK_t cmyk;
RgbToCMYK(rgb, &cmyk);
printf("RGB(%u,%u,%u) -> CMYK(%u,%u,%u,%u)\n", rgb.red, rgb.green, rgb.blue,
cmyk.cyan, cmyk.magenta, cmyk.yellow, cmyk.black);
// prints: RGB(132,34,255) -> CMYK(123, 221, 0, 0)
struct RGB_t rgb_red = { 255, 0, 0};
struct CMYK_t cmyk_red;
RgbToCMYK(rgb_red, &cmyk_red);
printf("RGB(%u,%u,%u) -> CMYK(%u,%u,%u,%u)\n", rgb_red.red, rgb_red.green, rgb_red.blue,
cmyk_red.cyan, cmyk_red.magenta, cmyk_red.yellow, cmyk_red.black);
// prints: RGB(255,0,0) -> CMYK(0, 255, 255, 0)
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment