★★★ 如何将RGB色彩值转换为CMYK色彩值?最好写个函数,呵呵~~谢谢各位了!

解决方案 »

  1.   

    转换关系 : 
        c=255-r;
        m=255-g;
        y=255-b;
        k=MinValue(c,m,y);
        c'=c-k;
        m'=m-k;
        y'=y-k;
    这里的c',m',y',k就是r,g,b的转换值。
      

  2.   

    PROCEDURE CMYKtoRGB(CONST C,M,Y,K:  TReal; VAR   R,G,B:  TReal);
      BEGIN
        R := 1.0 - (C + K);
        G := 1.0 - (M + K);
        B := 1.0 - (Y + K)
      END {CMYtoRGB};
      // R, G, B, C, M, Y each IN [0.0 .. 1.0]
      PROCEDURE RGBToCMYK(CONST R,G,B:  TReal;  VAR C,M,Y,K:  TReal);
      BEGIN
        RGBtoCMY(R,G,B, C,M,Y);
        K := MinValue([C, M, Y]);
        C := C - K;
        M := M - K;
        Y := Y - K
      END {RGBtoCMYK};没做过只是帮你找的资料
      

  3.   

    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;