mirror of
https://github.com/moparisthebest/Simba
synced 2025-02-15 14:50:09 -05:00
Merge CTS 3.
Algorithm may change over time and will stabilize on release of 0.98, there is room for speed improvements.
This commit is contained in:
parent
1f4ddd9ddd
commit
b339f58027
@ -65,7 +65,7 @@ begin
|
|||||||
|
|
||||||
col := 16777215; tol := 30;
|
col := 16777215; tol := 30;
|
||||||
|
|
||||||
for c := 0 to 2 do // benchmark all CTS'es
|
for c := 0 to 3 do // benchmark all CTS'es
|
||||||
begin
|
begin
|
||||||
MMLClient.MFinder.SetToleranceSpeed(c);
|
MMLClient.MFinder.SetToleranceSpeed(c);
|
||||||
t2 := gettickcount;
|
t2 := gettickcount;
|
||||||
|
@ -127,6 +127,12 @@ type
|
|||||||
end;
|
end;
|
||||||
PCTS2Info = ^TCTS2Info;
|
PCTS2Info = ^TCTS2Info;
|
||||||
|
|
||||||
|
TCTS3Info = record
|
||||||
|
L, A, B: extended;
|
||||||
|
Tol: Integer; { Squared }
|
||||||
|
end;
|
||||||
|
PCTS3Info = ^TCTS3Info;
|
||||||
|
|
||||||
TCTSInfo = Pointer;
|
TCTSInfo = Pointer;
|
||||||
TCTSInfoArray = Array of TCTSInfo;
|
TCTSInfoArray = Array of TCTSInfo;
|
||||||
TCTSInfo2DArray = Array of TCTSInfoArray;
|
TCTSInfo2DArray = Array of TCTSInfoArray;
|
||||||
@ -420,12 +426,30 @@ begin
|
|||||||
and (abs(l - i.L) <= i.Tol);
|
and (abs(l - i.L) <= i.Tol);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function ColorSame_cts3(ctsInfo: Pointer; C2: PRGB32): boolean;
|
||||||
|
|
||||||
|
var
|
||||||
|
i: TCTS3Info;
|
||||||
|
X, Y, Z, L, A, B: Extended;
|
||||||
|
begin
|
||||||
|
i := PCTS3Info(ctsInfo)^;
|
||||||
|
|
||||||
|
RGBToXYZ(C2^.R, C2^.G, C2^.B, X, Y, Z); // inline this
|
||||||
|
XYZToCIELab(X, Y, Z, L, A, B);
|
||||||
|
|
||||||
|
L := L - i.L;
|
||||||
|
A := A - i.A;
|
||||||
|
B := B - i.B;
|
||||||
|
Result := (L*L + A*A + B*B) < i.Tol;
|
||||||
|
end;
|
||||||
|
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
function Create_CTSInfo(cts: integer; Color, Tol: Integer;
|
function Create_CTSInfo(cts: integer; Color, Tol: Integer;
|
||||||
hueMod, satMod: extended): Pointer; overload;
|
hueMod, satMod: extended): Pointer; overload;
|
||||||
var
|
var
|
||||||
R, G, B: Integer;
|
R, G, B: Integer;
|
||||||
|
X, Y, Z: Extended;
|
||||||
begin
|
begin
|
||||||
case cts of
|
case cts of
|
||||||
0:
|
0:
|
||||||
@ -453,6 +477,15 @@ begin
|
|||||||
PCTS2Info(Result)^.satMod := Tol * satMod;
|
PCTS2Info(Result)^.satMod := Tol * satMod;
|
||||||
PCTS2Info(Result)^.Tol := Tol;
|
PCTS2Info(Result)^.Tol := Tol;
|
||||||
end;
|
end;
|
||||||
|
3:
|
||||||
|
begin
|
||||||
|
Result := AllocMem(SizeOf(TCTS3Info));
|
||||||
|
ColorToRGB(Color, R, G, B);
|
||||||
|
RGBToXYZ(R, G, B, X, Y, Z);
|
||||||
|
XYZToCIELab(X, Y, Z, PCTS3Info(Result)^.L, PCTS3Info(Result)^.A,
|
||||||
|
PCTS3Info(Result)^.B);
|
||||||
|
PCTS3Info(Result)^.Tol := Tol*Tol;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -533,6 +566,7 @@ begin
|
|||||||
0: Result := @ColorSame_cts0;
|
0: Result := @ColorSame_cts0;
|
||||||
1: Result := @ColorSame_cts1;
|
1: Result := @ColorSame_cts1;
|
||||||
2: Result := @ColorSame_cts2;
|
2: Result := @ColorSame_cts2;
|
||||||
|
3: Result := @ColorSame_cts3;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user