Conversão entre RGB e CMYK

O sistema de cores CMYK (Cyan-Magenta-Yellow-Key/blacK) é o complementar ao RGB.

O programa RGB2CMYK calcula a imagem CMYK considerando que a imagem RGB está em 8 bits. Modifique o valor 255 pelo adequado caso o numero de bits seja diferente.

{
Imagem i1, i2, i3 ("CB4"); // Imagens de Entrada em RGB
Imagem io1, io2, io3, io4 ("CB4"); // Imagens de Saída em CMYK

MNT mc, mm, my, mk ("CAT_MNT");

MNT red, green, blue ("CAT_MNT");

 mc = Novo( Nome = "CMYK_C" , ResX = 20 , ResY = 20 , Escala = 50000 );
 mm = Novo( Nome = "CMYK_M" , ResX = 20 , ResY = 20 , Escala = 50000 );
 my = Novo( Nome = "CMYK_Y" , ResX = 20 , ResY = 20 , Escala = 50000 );
 mk = Novo( Nome = "CMYK_K" , ResX = 20 , ResY = 20 , Escala = 50000 );

 red   = New(Name="TMP_CMYK_R",ResX = 20 , ResY = 20 , Escala = 50000 );
 green = New(Name="TMP_CMYK_G",ResX = 20 , ResY = 20 , Escala = 50000 );
 blue  = New(Name="TMP_CMYK_B",ResX = 20 , ResY = 20 , Escala = 50000 );

 i1 = Recupere( Nome = "banda_R" ); // Substituir banda_R entre parênteses por seu R
 i2 = Recupere( Nome = "banda_G" ); // Substituir banda_G entre parênteses por seu G
 i3 = Recupere( Nome = "banda_B" ); // Substituir banda_B entre parênteses por seu B

//Assume input image range 0-255, output range 0-1

  red   = Digital(i1)/255.;
  green   = Digital(i2)/255.;
  blue   = Digital(i3)/255.;

  //    K := 1 - Maximum(r,g,b)
  mk = (red >= green ) && (red >= blue  ) ? red :
          (blue >= green) ? blue : green;
  mk = 1.0 - mk;
 
//    C := (1- R'- K) / (1-K)
  mc = (1.0 - red - mk ) / (1.0 - mk);
  
//    M = (1-G'-K) / (1-K)
  mm = (1.0 - green - mk ) / (1.0 - mk);

//    Y = (1-B'-K) / (1-K)
  my = (1.0 - blue - mk ) / (1.0 - mk);

io1= Novo( Nome = "CMYK_IC" , ResX = 20 , ResY = 20 );
io2= Novo( Nome = "CMYK_IM" , ResX = 20 , ResY = 20 );
io3= Novo( Nome = "CMYK_IY" , ResX = 20 , ResY = 20 );
io4= Novo( Nome = "CMYK_IK" , ResX = 20 , ResY = 20 );

io1=Image(mc* 255.);
io2=Image(mm* 255.);
io3=Image(my* 255.);
io4=Image(mk* 255.);

}

Conversão entre CMYK e RGB

O programa CMYK2RGB calcula a imagem RGB considerando que a imagem CMYK está entre 0 e 1.

{
Imagem i1, i2, i3 ("CB4");

MNT mc, mm, my, mk ("CAT_MNT");
MNT red, green, blue ("CAT_MNT");

 mc = Recupere( Nome = "CMYK_C" );
 mm = Recupere( Nome = "CMYK_M" );
 my = Recupere( Nome = "CMYK_Y" );
 mk = Recupere( Nome = "CMYK_K" );

 red   = New(Name="CMYK_R",ResX = 20 , ResY = 20 , Escala = 50000 );
 green = New(Name="CMYK_G",ResX = 20 , ResY = 20 , Escala = 50000 );
 blue  = New(Name="CMYK_B",ResX = 20 , ResY = 20 , Escala = 50000 );

// R = 255 × (1-C) × (1-K)
  red   = (1.0 - mc) * (1.0 - mk);

// G = 255 × (1-M) × (1-K)
  green   = (1.0 - mm) * (1.0 - mk);

// B = 255 × (1-Y) × (1-K)
  blue   = (1.0 - my) * (1.0 - mk);

 i1 = New(Name="CMYK_2R",ResX = 20 , ResY = 20 , Escala = 50000 );
 i2 = New(Name="CMYK_2G",ResX = 20 , ResY = 20 , Escala = 50000 );
 i3 = New(Name="CMYK_2B",ResX = 20 , ResY = 20 , Escala = 50000 );

  i1   = Image(red   * 255.);
  i2   = Image(green * 255.);
  i3   = Image(blue  * 255.);
}

Navigation