Codes couleurs rgb, cmyk en francais : rvb, cmjn

Contenu du snippet

Les procedures RGBtoCMYK et CMYKtoRGB peuvent être trouvé réalisés de differentes manieres, notamment par simple appel des procedures inclus dans Delphi TColor.GetCValue(color)... MAIS le rendu couleur (c'est a dire entre l ecran et la realité) entre les codes données par delphi et ceux rentrées initialement n'est pas bon (toujours trop claire ou trop foncé, ps: et ce n'est pas en jouant sur le contraste et la luminosité de l'ecran que ca changera, bien qu il faille regler son ecran une premiere fois pour l'etalonner).

il y a deux fonctions CMYKtoRGB :
- la premiere reprend les valeur CMYK(CMJN) comme etant sur une plage [0..255]
CMYKtoRGB(C,M,Y,K : byte;var R : byte;var G : byte;var B : byte);

- la seconde permet de choisir entre une plage [0..255] et [0..100] (si Coef=True) pour le code CMYK
CMYKtoRGB(C,M,Y,K : byte;var R : byte;var G : byte;var B : byte;Coef : boolean);

idem pour RGBtoCMYK

solution : utiliser les fonctions ci dessous.

Source / Exemple :


// C,M,Y,K,R,G,B ont une plage de [0..255] si Coef est faux, sinon CMJN est pris sur la plage [0..100]
procedure CMYKtoRGB(C,M,Y,K : byte;var R : byte;var G : byte;var B : byte;Coef : boolean); overload;
begin
         if Coef then
         begin
                    C := Round(C*2.55);
                    M := Round(M*2.55);
                    Y := Round(Y*2.55);
                    K := Round(K*2.55);
         end;
     if (Integer(C) + Integer(K)) < 255 then
         R := 255 - (C + K) else
         R := 0;
     if (Integer(M) + Integer(K)) < 255 then
         G := 255 - (M + K) else
         G := 0;
     if (Integer(Y) + Integer(K)) < 255 then
         B := 255 - (Y + K) else
         B := 0;
end;
procedure CMYKtoRGB(C,M,Y,K : byte;var R : byte;var G : byte;var B : byte); overload;
begin
         CMYKtoRGB(C,M,Y,K,R,G,B,False);
end;

// C,M,Y,K,R,G,B ont une plage de [0..255] si Coef est faux, sinon CMJN est pris sur la plage [0..100]
procedure RGBtoCMYK(R,G,B : byte;var C : byte;var M : byte;var Y : byte;var K : byte;Coef : boolean); overload;
begin
         C := 255-R;
         M := 255-G;
         Y := 255-B;
         if C < M then
            K := C else
            K := M;
         if Y < K then
            K := Y;
         if K > 0 then
         begin
                    C := C - K;
                    M := M - K;
                    Y := Y - K;
         end;
     if Coef then
     begin
          C := Round(C / 2.55);
          M := Round(C / 2.55);
          Y := Round(C / 2.55);
          K := Round(C / 2.55);
     end;
end;
procedure RGBtoCMYK(R,G,B : byte;var C : byte;var M : byte;var Y : byte;var K : byte); overload;
begin
     RGBtoCMYK(R,G,B,C,M,Y,K,False);
end;

Conclusion :


pour plus d informations sur les couleurs et des exemples de programmes : www.efg2.com/lab

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.