|
@@ -5,7 +5,8 @@ unit UStateType;
|
|
interface
|
|
interface
|
|
|
|
|
|
uses
|
|
uses
|
|
- Types, Classes, SysUtils, BGRABitmap, BGRABitmapTypes, BGRALayers, fgl;
|
|
|
|
|
|
+ Types, Classes, SysUtils, BGRABitmap, BGRABitmapTypes, BGRALayers,
|
|
|
|
+ BGRALayerOriginal, fgl;
|
|
|
|
|
|
const MinSizeToCompress = 512; //set to 1 if you want always compression
|
|
const MinSizeToCompress = 512; //set to 1 if you want always compression
|
|
const MinSerializedSize = 16384;
|
|
const MinSerializedSize = 16384;
|
|
@@ -199,12 +200,14 @@ type
|
|
FInfo: TLayerInfo;
|
|
FInfo: TLayerInfo;
|
|
FIndex: integer;
|
|
FIndex: integer;
|
|
FOriginalData: TMemoryStream;
|
|
FOriginalData: TMemoryStream;
|
|
- FOriginalKnown: boolean;
|
|
|
|
|
|
+ FOriginalBitmapStored: boolean;
|
|
FOriginalRenderStatus: TOriginalRenderStatus;
|
|
FOriginalRenderStatus: TOriginalRenderStatus;
|
|
FOriginalMatrix: TAffineMatrix;
|
|
FOriginalMatrix: TAffineMatrix;
|
|
FOriginalDraft: boolean;
|
|
FOriginalDraft: boolean;
|
|
public
|
|
public
|
|
constructor Create(ALayeredImage: TBGRALayeredBitmap; AIndex: integer);
|
|
constructor Create(ALayeredImage: TBGRALayeredBitmap; AIndex: integer);
|
|
|
|
+ constructor Create(ALayeredImage: TBGRALayeredBitmap; AIndex: integer;
|
|
|
|
+ AAlwaysStoreBitmap: boolean);
|
|
procedure Restore(ALayeredImage: TBGRALayeredBitmap);
|
|
procedure Restore(ALayeredImage: TBGRALayeredBitmap);
|
|
procedure Replace(ALayeredImage: TBGRALayeredBitmap);
|
|
procedure Replace(ALayeredImage: TBGRALayeredBitmap);
|
|
property LayerIndex: integer read FIndex;
|
|
property LayerIndex: integer read FIndex;
|
|
@@ -1023,15 +1026,35 @@ end;
|
|
|
|
|
|
constructor TStoredLayer.Create(ALayeredImage: TBGRALayeredBitmap;
|
|
constructor TStoredLayer.Create(ALayeredImage: TBGRALayeredBitmap;
|
|
AIndex: integer);
|
|
AIndex: integer);
|
|
|
|
+var
|
|
|
|
+ {%H-}orig: TBGRALayerCustomOriginal;
|
|
|
|
+ alwaysStoreBitmap: Boolean;
|
|
|
|
+begin
|
|
|
|
+ alwaysStoreBitmap := false;
|
|
|
|
+ if (ALayeredImage.LayerOriginalGuid[AIndex]<>GUID_NULL) and
|
|
|
|
+ ALayeredImage.LayerOriginalKnown[AIndex] then
|
|
|
|
+ begin
|
|
|
|
+ try
|
|
|
|
+ orig := ALayeredImage.LayerOriginal[AIndex];
|
|
|
|
+ except
|
|
|
|
+ on ex:exception do
|
|
|
|
+ alwaysStoreBitmap:= true;
|
|
|
|
+ end;
|
|
|
|
+ end;
|
|
|
|
+ Create(ALayeredImage, AIndex, alwaysStoreBitmap);
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+constructor TStoredLayer.Create(ALayeredImage: TBGRALayeredBitmap;
|
|
|
|
+ AIndex: integer; AAlwaysStoreBitmap: boolean);
|
|
begin
|
|
begin
|
|
FIndex := AIndex;
|
|
FIndex := AIndex;
|
|
FInfo := GetLayerInfo(ALayeredImage, AIndex);
|
|
FInfo := GetLayerInfo(ALayeredImage, AIndex);
|
|
if ALayeredImage.LayerOriginalGuid[AIndex]<>GUID_NULL then
|
|
if ALayeredImage.LayerOriginalGuid[AIndex]<>GUID_NULL then
|
|
begin
|
|
begin
|
|
- FOriginalKnown := ALayeredImage.LayerOriginalKnown[AIndex];
|
|
|
|
|
|
+ FOriginalBitmapStored := AAlwaysStoreBitmap or not ALayeredImage.LayerOriginalKnown[AIndex];
|
|
FOriginalRenderStatus:= ALayeredImage.LayerOriginalRenderStatus[AIndex];
|
|
FOriginalRenderStatus:= ALayeredImage.LayerOriginalRenderStatus[AIndex];
|
|
|
|
|
|
- if FOriginalKnown then
|
|
|
|
|
|
+ if not FOriginalBitmapStored then
|
|
inherited Create(nil)
|
|
inherited Create(nil)
|
|
else
|
|
else
|
|
inherited Create(ALayeredImage.LayerBitmap[AIndex]);
|
|
inherited Create(ALayeredImage.LayerBitmap[AIndex]);
|
|
@@ -1056,7 +1079,7 @@ begin
|
|
FOriginalData.Position:= 0;
|
|
FOriginalData.Position:= 0;
|
|
idxOrig := ALayeredImage.AddOriginalFromStream(FOriginalData, true);
|
|
idxOrig := ALayeredImage.AddOriginalFromStream(FOriginalData, true);
|
|
|
|
|
|
- if FOriginalKnown then
|
|
|
|
|
|
+ if not FOriginalBitmapStored then
|
|
begin
|
|
begin
|
|
tempIdx := ALayeredImage.AddLayerFromOriginal(ALayeredImage.Original[idxOrig].Guid, FOriginalMatrix);
|
|
tempIdx := ALayeredImage.AddLayerFromOriginal(ALayeredImage.Original[idxOrig].Guid, FOriginalMatrix);
|
|
ALayeredImage.RenderLayerFromOriginal(tempIdx, FOriginalDraft);
|
|
ALayeredImage.RenderLayerFromOriginal(tempIdx, FOriginalDraft);
|
|
@@ -1082,7 +1105,7 @@ begin
|
|
begin
|
|
begin
|
|
FOriginalData.Position:= 0;
|
|
FOriginalData.Position:= 0;
|
|
idxOrig := ALayeredImage.AddOriginalFromStream(FOriginalData, true);
|
|
idxOrig := ALayeredImage.AddOriginalFromStream(FOriginalData, true);
|
|
- if FOriginalKnown then
|
|
|
|
|
|
+ if not FOriginalBitmapStored then
|
|
begin
|
|
begin
|
|
ALayeredImage.LayerOriginalGuid[FIndex] := ALayeredImage.OriginalGuid[idxOrig];
|
|
ALayeredImage.LayerOriginalGuid[FIndex] := ALayeredImage.OriginalGuid[idxOrig];
|
|
ALayeredImage.LayerOriginalMatrix[FIndex] := FOriginalMatrix;
|
|
ALayeredImage.LayerOriginalMatrix[FIndex] := FOriginalMatrix;
|