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