===== 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.);
}