procedure RGBTOCMYK(R : byte; G : byte; B : byte; var C : byte; var M : byte; var Y : byte; var K : byte); 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; end; procedure CMYKTORGB(C : byte; M: byte; Y : byte; K : byte; var R : byte; var G : byte; var B : byte); begin 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 ColorCorrectCMYK(var C : byte; var M : byte; var Y : byte; var K : byte); var MinColor : byte; begin if C < M then MinColor := C else MinColor := M; if Y < MinColor then MinColor := Y; if MinColor + K > 255 then MinColor := 255 - K; C := C - MinColor; M := M - MinColor; Y := Y - MinColor; K := K + MinColor; end; procedure TForm1.Button1Click(Sender: TObject); var R : byte; G : byte; B : byte; C : byte; M : byte; Y : byte; K : byte; begin R := 151; G := 81; B := 55; Memo1.Lines.Add('R = ' + IntToStr(R)); Memo1.Lines.Add('G = ' + IntToStr(G)); Memo1.Lines.Add('B = ' + IntToStr(B)); Memo1.Lines.Add('-------------------'); RGBTOCMYK(R, G, B, C, M, Y, K); Memo1.Lines.Add('C = ' + IntToStr(C)); Memo1.Lines.Add('M = ' + IntToStr(M)); Memo1.Lines.Add('Y = ' + IntToStr(Y)); Memo1.Lines.Add('K = ' + IntToStr(K)); Memo1.Lines.Add('-------------------'); CMYKTORGB(C, M, Y, K, R, G, B); Memo1.Lines.Add('R = ' + IntToStr(R)); Memo1.Lines.Add('G = ' + IntToStr(G)); Memo1.Lines.Add('B = ' + IntToStr(B)); Memo1.Lines.Add('-------------------'); RGBTOCMYK(R, G, B, C, M, Y, K); c := c + 2; m := m + 2; y := y + 2; ColorCorrectCMYK(C, M, Y, K); Memo1.Lines.Add('C = ' + IntToStr(C)); Memo1.Lines.Add('M = ' + IntToStr(M)); Memo1.Lines.Add('Y = ' + IntToStr(Y)); Memo1.Lines.Add('K = ' + IntToStr(K)); end;