请参考:
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后的值都是很小的,显示出来的都是黑色吗