Codes couleurs rgb, cmyk en francais : rvb, cmjn

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 266 fois - Téléchargée 37 fois

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

Ajouter un commentaire

Commentaires

Messages postés
23
Date d'inscription
jeudi 16 mai 2002
Statut
Membre
Dernière intervention
28 janvier 2008

Désolé, voici la raison des Rounds (que je vais enlever de suite)

Il y avait des round car que dans les entreprises de peinture, et dans le secteur de l impression en général je pense, ils ne comptent pas en 0..255 mais en 0..100 pour les codes CMJN, donc j avais mis un coefficient CMYKcoef afin de faire le changement automatiquement :

C := Round(C*CMYKcoef);
M := Round(M*CMYKcoef);
Y := Round(Y*CMYKcoef);
K := Round(K*CMYKcoef);

avec CMYKcoef = 2.55;

voila pour ces fameux Round qui ne servaient ici a rien
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
1
Pourquoi diable ajoutes-tu des round() sur des valeurs entières ?
Ces quatres lignes :
C := Round(C);
M := Round(M);
Y := Round(Y);
K := Round(K);
ne servent à rien.

Nono

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.