对于一幅图(TIF ,RGB模式)如何处理为(TIF,CMYK)呢?

解决方案 »

  1.   

    没用程序做过。但是一般的处理是在photoshop里完成。
      

  2.   

    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;
      

  3.   

    (1)RGB与CMYK
    RGB -> CMYK | CMYK -> RGB
        Black=minimum(1-Red,1-Green,1-Blue) | Red=1-minimum(1,Cyan*(1-Black)+Black)
        Cyan=(1-Red-Black)/(1-Black) | Green=1-minimum(1,Magenta*(1-Black)+Black)
        Magenta=(1-Green-Black)/(1-Black) | Blue=1-minimum(1,Yellow*(1-Black)+Black)
        Yellow=(1-Blue-Black)/(1-Black) |    Of course, I assume that C, M, Y, K, R, G, and B  have a range of [0;1].(2)RGB -> CIE XYZitu (D65):
        |X|   |0.430574 0.341550 0.178325|   |Red  |
        |Y| = |0.222015 0.706655 0.071330| * |Green|
        |Z|   |0.020183 0.129553 0.939180|   |Blue |(3)CIE XYZ -> CIE Lab
        { L=116*((Y/Yn)^(1/3)) whether Y/Yn>0.008856
        { L=903.3*Y/Yn whether Y/Yn<=0.008856
        a=500*(f(X/Xn)-f(Y/Yn))
        b=200*(f(Y/Yn)-f(Z/Zn))
        where { f(t)=t^(1/3) whether Y/Yn>0.008856
              { f(t)=7.787*t+16/116--------------------------------------------
    (参看:http://www.neuro.sfc.keio.ac.jp/~aly/polygon/info/color-space-faq.html)
    这个网址我可是找了近20小时!缘由:
    我本想在C#环境下开发印刷格式的300DPI CMYK TIF图像转化为RGB 72DPI 的JPG格式图像,虽然找到了公式,但仍无法得到满意的答案(主要原因是:CMYK图像读入后转RGB时严重变色,主要是变暗)。不知各位有否更好的解决方案?