FPReferenceWhiteGet call itself, stackoverflow solved

This commit is contained in:
Massimo Magnano 2023-07-24 08:35:00 +00:00
parent a3beff94dc
commit e83b557a0a

View File

@ -28,6 +28,7 @@ uses FPImage;
type
TIlluminant = string[10];
PXYZReferenceWhite = ^TXYZReferenceWhite;
TXYZReferenceWhite = packed record
X, Y, Z: single;
@ -298,6 +299,7 @@ type
TStdHSLAHelper = record helper for TStdHSLA
function ToStdRGBA: TStdRGBA;
function ToStdHSVA: TStdHSVA;
function ToExpandedPixel: TExpandedPixel;
end;
{ TStdHSVAHelper }
@ -311,6 +313,8 @@ type
TStdCMYKHelper = record helper for TStdCMYK
function ToStdRGBA(AAlpha: Single = 1): TStdRGBA;
function ToExpandedPixel: TExpandedPixel;overload;
function ToExpandedPixel(AAlpha: word): TExpandedPixel;overload;
end;
{ TByteMaskHelper }
@ -357,6 +361,8 @@ type
function ToXYZA: TXYZA; overload;
function ToXYZA(const AReferenceWhite: TXYZReferenceWhite): TXYZA; overload;
function ToLChA: TLChA;
function ToExpandedPixel: TExpandedPixel; overload;
function ToExpandedPixel(const AReferenceWhite: TXYZReferenceWhite): TExpandedPixel; overload;
end;
{ TLChAHelper }
@ -1630,6 +1636,11 @@ begin
Result.value := v;
end;
function TStdHSLAHelper.ToExpandedPixel: TExpandedPixel;
begin
result :=self.ToStdRGBA.ToExpandedPixel;
end;
{ TStdHSVAHelper }
function TStdHSVAHelper.ToStdRGBA: TStdRGBA;
@ -1718,8 +1729,28 @@ begin
end;
end;
function TStdCMYKHelper.ToExpandedPixel: TExpandedPixel;
begin
self.ToStdRGBA.ToExpandedPixel;
end;
function TStdCMYKHelper.ToExpandedPixel(AAlpha: word): TExpandedPixel;
begin
self.ToStdRGBA(AAlpha).ToExpandedPixel;
end;
{ TLabAHelper }
function TLabAHelper.ToExpandedPixel: TExpandedPixel;
begin
self.ToXYZA.ToLinearRGBA.ToExpandedPixel;
end;
function TLabAHelper.ToExpandedPixel(const AReferenceWhite: TXYZReferenceWhite): TExpandedPixel;
begin
self.ToXYZA(AReferenceWhite).ToLinearRGBA(AReferenceWhite).ToExpandedPixel;
end;
function TLabAHelper.ToXYZA: TXYZA;
begin
if FPReferenceWhite=nil then raise FPImageException.Create('Reference white (FPReferenceWhite) can not be null');
@ -2419,9 +2450,21 @@ begin
end;
function FPReferenceWhiteGet(AObserverAngle: integer; AIlluminant: TIlluminant): PXYZReferenceWhite;
var
rp: PXYZReferenceWhite;
i: integer;
begin
result := FPReferenceWhiteGet(AObserverAngle, AIlluminant);
if result = nil then raise FPImageException.Create('Reference white not found');
for i := 0 to Length(FPReferenceWhiteArray) - 1 do
begin
rp := @FPReferenceWhiteArray[i];
if (rp^.ObserverAngle = AObserverAngle) and (rp^.Illuminant = AIlluminant) then
begin
result := rp;
exit;
end;
end;
result := nil;
end;
function FPReferenceWhiteAdd(const AReferenceWhite: TXYZReferenceWhite):PXYZReferenceWhite;