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
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.