static void extract_yellowk (const guchar *src, gint bpp, gint numpix, guchar **dst) { register const guchar *rgb_src = src; register guchar *yellow_dst = dst[0]; register gint count = numpix, offset = bpp-3; GimpCMYK gcmyk; gimp_cmyk_set (&gcmyk, 0,0,0,0); while (count-- > 0) { GimpRGB grgb; guchar r, g, b; r = *rgb_src++; g = *rgb_src++; b = *rgb_src++; gimp_rgb_set_uchar (&grgb, r,g,b); gimp_rgb_to_cmyk (&grgb, 1.0, &gcmyk); gimp_cmyk_get_uchar (&gcmyk, NULL, NULL, yellow_dst++, NULL); rgb_src += offset; } }
static VALUE rb_gimp_rgb_to_cmyk (VALUE self, VALUE rgb, VALUE pullout) { GimpCMYK cmyk; gimp_rgb_to_cmyk(rb2GimpRGBPtr(rgb), (gdouble)NUM2DBL(pullout), &cmyk); return GimpCMYK2rb(&cmyk); }
static void colorsel_cmyk_set_color (GimpColorSelector *selector, const GimpRGB *rgb, const GimpHSV *hsv) { ColorselCmyk *module = COLORSEL_CMYK (selector); gdouble values[4]; gint i; if (module->rgb2cmyk) { gdouble rgb_values[3]; gdouble cmyk_values[4]; rgb_values[0] = rgb->r; rgb_values[1] = rgb->g; rgb_values[2] = rgb->b; cmsDoTransform (module->rgb2cmyk, rgb_values, cmyk_values, 1); module->cmyk.c = cmyk_values[0] / 100.0; module->cmyk.m = cmyk_values[1] / 100.0; module->cmyk.y = cmyk_values[2] / 100.0; module->cmyk.k = cmyk_values[3] / 100.0; } else { gimp_rgb_to_cmyk (rgb, 1.0, &module->cmyk); } values[0] = module->cmyk.c * 100.0; values[1] = module->cmyk.m * 100.0; values[2] = module->cmyk.y * 100.0; values[3] = module->cmyk.k * 100.0; for (i = 0; i < 4; i++) { g_signal_handlers_block_by_func (module->adj[i], colorsel_cmyk_adj_update, module); gtk_adjustment_set_value (module->adj[i], values[i]); g_signal_handlers_unblock_by_func (module->adj[i], colorsel_cmyk_adj_update, module); } }