Registriert seit: 17. Mai 2007
482 Beiträge
Delphi XE6 Professional
|
RGB/CMK/CMYK conversions
2. Jan 2012, 15:01
Delphi-Quellcode:
procedure _CMYToCMYK(const C, M, Y: Single; out Cyan, Magenta, Yellow, Black: Single);
var
var_K: Single;
begin
var_K := 1;
if C < var_K then var_K := C;
if M < var_K then var_K := M;
if Y < var_K then var_K := Y;
if var_K = 1 then
begin //Black
Cyan := 0;
Magenta := 0;
Yellow := 0;
end
else
begin
Cyan := (C - var_K) / (1 - var_K);
Magenta := (M - var_K) / (1 - var_K);
Yellow := (Y - var_K) / (1 - var_K);
end;
Black := var_K;
end;
procedure _CMYKToCMY(const C, M, Y, K: Single; out Cyan, Magenta, Yellow: Single);
begin
Cyan := (C * (1 - K) + K);
Magenta := (M * (1 - K) + K);
Yellow := (Y * (1 - K) + K);
end;
procedure _RGBToCMY(const R, G, B: Byte; out C, M, Y: Single);
begin
C := 1 - (R / 255);
M := 1 - (G / 255);
Y := 1 - (B / 255);
end;
procedure _CMYToRGB(const C, M, Y: Single; out R, G, B: Byte);
begin
R := Round((1 - C) * 255);
G := Round((1 - M) * 255);
B := Round((1 - Y) * 255);
end;
procedure _RGBToCMYK(const R, G, B: Byte; out C, M, Y, K: Single);
var
Cyan, Magenta, Yellow: Single;
begin
_RGBToCMY(R, G, B, Cyan, Magenta, Yellow);
_CMYToCMYK(Cyan, Magenta, Yellow, C, M, Y, K)
end;
procedure _CMYKToRGB(const C, M, Y, K: Single; out R, G, B: Byte);
var
Cyan, Magenta, Yellow: Single;
begin
_CMYKToCMY(C, M, Y, K, Cyan, Magenta, Yellow);
_CMYToRGB(Cyan, Magenta, Yellow, R, G, B);
end;
Formulas I got from EasyRGB. Result are different in this code and Photoshop:
Code:
_CMYKToRGB(0.11, 0.13, 0.99, 0, R, G, B); // 227 222 3; ps: 232, 207, 30
_CMYKToRGB(0, 0, 0.5, 0.5, R, G, B); // 124 124 64; ps: 150 145 91
Where is bug?
|