请问Lab->RGB, RGB->LAB的颜色转化方法,以及代码,或者有什么参考书籍,谢谢

解决方案 »

  1.   

    请参考:http://delphicikk.atw.hu/listaz.php?id=1452&oldal=22
      

  2.   

    谢谢!
    但编译时发生错误,在[Error] uLabRgb.pas(175): Left side cannot be assigned to
    [Fatal Error] ColorConvert.dpr(6): Could not compile used unit 'uLabRgb.pas'在最后一节
      for I := 1 to 3 do
        for J := 1 to 3 do
          RgbXyz[I, J]:=CToXyz[I, J] * C[J];
      XyzRgb := InvertMatrix3(RgbXyz)
      

  3.   

    我这里测试没有任何问题的。uses uLabRgb;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      RGB: TVector3;
      LAB: TVector3;
    begin
      RGB[1] := 255;
      RGB[2] := 125;
      RGB[3] := 233;
      LAB := RGBTOLAB(RGB);
      Caption := FloatToStr(LAB[1])+':'+FloatToStr(LAB[2])+':'+FloatToStr(LAB[3]);
    end;
      

  4.   

    const
      RgbXyz: TMatrix3 = ((1, 0, 0), (0, 1, 0), (0, 0, 1));
      XyzRgb: TMatrix3 = ((1, 0, 0), (0, 1, 0), (0, 0, 1));....procedure InitTransformationMatrices;
    var
      I: Integer;
      J: Integer;
      PhosphorZ: TVector3;
      C: TVector3;
      CToXyz: TMatrix3;
      XyzToC: TMatrix3;
    begin
      for I := 1 to 3 do
      begin
        CToXyz[1, I] := PhosphorX[I];
        CToXyz[2, I] := PhosphorY[I];
        CToXyz[3, I] := 1 - PhosphorX[I] - PhosphorY[I]
      end;
      XyzToC := InvertMatrix3(CToXyz);
      C := MultiplyMatrix3ByVector3(XyzToC, WhitePoint);
      for I := 1 to 3 do
        for J := 1 to 3 do
          RgbXyz[I, J]:=CToXyz[I, J] * C[J];   //发生编译错误
      XyzRgb := InvertMatrix3(RgbXyz)   //发生编译错误
    end;
      

  5.   

    [Error] uLabRgb.pas(175): Left side cannot be assigned to------------------这个错误一般是指左边被赋值的变量的读写属性为只读, 但这里应该没有这种情况。
      

  6.   

    const
      RgbXyz: TMatrix3 = ((1, 0, 0), (0, 1, 0), (0, 0, 1));
      XyzRgb: TMatrix3 = ((1, 0, 0), (0, 1, 0), (0, 0, 1));并不是真正意义上的const, 所以对它们赋值是没有问题的。
      

  7.   

    假一个编译指示器unit uLabRgb;interfacetype
      TVector3 = array[1..3] of Double;function LabToRgb(Lab: TVector3): TVector3;
    function RgbToLab(Rgb: TVector3): TVector3;implementation{$J+} //注意................
      

  8.   

    LabToRGB后的值都是很小的,显示出来的都是黑色吗