现在的位置: 首页 > 综合 > 正文

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

2012年05月03日 ⁄ 综合 ⁄ 共 2104字 ⁄ 字号 评论关闭
请问Lab->RGB, RGB->LAB的颜色转化方法,以及代码,或者有什么参考书籍,谢谢 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_2006121620555555.html
请问Lab->RGB,   RGB->LAB的颜色转化方法,以及代码,或者有什么参考书籍,谢谢

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

谢谢!  
  但编译时发生错误,在  
   
  [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)

我这里测试没有任何问题的。  
   
  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;

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;

我这里没有任何编译错误啊。

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

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

发了三次,不能再发只好要马甲顶一下

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

搞定了,感谢!

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

抱歉!评论已关闭.