button + and - updated.

RoundRectagle works.
add the Brightness,etc function to TDLBitmap.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1585 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
yangjixian
2011-04-20 16:42:01 +00:00
parent 14c9b6cdd6
commit 737fae9e04
7 changed files with 828 additions and 637 deletions

View File

@ -16,11 +16,7 @@ type
rgbtAlpha: byte; rgbtAlpha: byte;
end; end;
PRGBATriple = ^TRGBATriple; PRGBATriple = ^TRGBATriple;
{$ifdef MSWINDOWS}
TRGBATriple = tagRGBTRIPLE;
{$else}
TRGBATriple = tagRGBATRIPLE; TRGBATriple = tagRGBATRIPLE;
{$endif}
PRGBATripleArray = ^TRGBATripleArray; PRGBATripleArray = ^TRGBATripleArray;
TRGBATripleArray = array[word] of TRGBATriple; TRGBATripleArray = array[word] of TRGBATriple;
@ -56,6 +52,9 @@ type
procedure Rotate90; virtual; procedure Rotate90; virtual;
procedure Rotate180; virtual; procedure Rotate180; virtual;
procedure Rotate270; virtual; procedure Rotate270; virtual;
procedure RGBDelta(RedChange, GreenChange, BlueChange: integer);
procedure Brightness(ValueChange: integer);
procedure Contrast(ValueChange: integer);
property ScanLine[Row: integer]: pRGBATriple read GetScanLine; property ScanLine[Row: integer]: pRGBATriple read GetScanLine;
procedure FillEllipse(X1, Y1, X2, Y2: integer); virtual; procedure FillEllipse(X1, Y1, X2, Y2: integer); virtual;
procedure CutToClipboard; virtual; procedure CutToClipboard; virtual;
@ -76,362 +75,22 @@ function RotateBitmap(Bitmap: TDLBitmap; Angle: integer; BackColor: TColor): TDL
function BitmapFlip(const Vertical: boolean; const Horizontal: boolean; function BitmapFlip(const Vertical: boolean; const Horizontal: boolean;
var BitmapIn: TDLBitmap; out BitmapOut: TDLBitmap): boolean; var BitmapIn: TDLBitmap; out BitmapOut: TDLBitmap): boolean;
procedure InvertBitmap(aBitmap: TDLBitmap); procedure InvertBitmap(aBitmap: TDLBitmap);
procedure ChangeRGB(SrcBmp: TDLBitmap; RedChange, GreenChange, BlueChange: integer);
procedure ChangeBrightness(SrcBmp: TDLBitmap; ValueChange: integer);
procedure ChangeContrast(SrcBmp: TDLBitmap; ValueChange: integer);
implementation implementation
procedure LazBMPRotate90(const aBitmap: TDLBitmap; IsTurnRight: boolean); {$I DLBmpUtils.inc}
var
i, j: integer;
rowIn, rowOut: PRGBATripleArray;
Bmp: TDLBitmap;
Width, Height: integer;
IntfImg1, IntfImg2: TLazIntfImage;
ImgHandle, ImgMaskHandle: HBitmap;
begin
Bmp := TDLBitmap.Create;
Bmp.Width := aBitmap.Height;
Bmp.Height := aBitmap.Width;
Bmp.PixelFormat := pf24bit;
IntfImg1 := TLazIntfImage.Create(0, 0);
IntfImg1.LoadFromBitmap(Bmp.Handle, Bmp.MaskHandle);
IntfImg2 := TLazIntfImage.Create(0, 0);
IntfImg2.LoadFromBitmap(aBitmap.Handle, aBitmap.MaskHandle);
Width := aBitmap.Width - 1;
Height := aBitmap.Height - 1;
for j := 0 to Height do
begin
rowIn := IntfImg2.GetDataLineStart(j);
for i := 0 to Width do
begin
rowOut := IntfImg1.GetDataLineStart(i);
if IsTurnRight then
rowOut^[Height - j] := rowIn^[i]
else
rowOut^[j] := rowIn^[Width - i];
end;
end;
IntfImg1.CreateBitmaps(ImgHandle, ImgMaskHandle, False);
Bmp.Handle := ImgHandle;
Bmp.MaskHandle := ImgMaskHandle;
IntfImg1.Free;
IntfImg2.Free;
aBitmap.Assign(Bmp);
Bmp.Free;
end;
procedure BMPRotate90(const Bitmap: TDLBitmap);
var
i, j: integer;
rowIn, rowOut: pRGBATriple;
Bmp: TDLBitmap;
Width, Height: integer;
begin
Bmp := TDLBitmap.Create;
Bmp.Width := Bitmap.Height;
Bmp.Height := Bitmap.Width;
Width := Bitmap.Width - 1;
Height := Bitmap.Height - 1;
for j := 0 to Height do
begin
rowIn := Bitmap.ScanLine[j];
for i := 0 to Width do
begin
rowOut := Bmp.ScanLine[i];
rowOut[Height - j] := rowIn[i];
end;
end;
Bmp.InvalidateScanLine;
Bitmap.Assign(Bmp);
end;
procedure BMPRotate180(const Bitmap: TDLBitmap);
var
i, j: integer;
rowIn, rowOut: pRGBATriple;
Bmp: TDLBitmap;
Width, Height: integer;
begin
Bmp := TDLBitmap.Create;
Bmp.Width := Bitmap.Width;
Bmp.Height := Bitmap.Height;
Width := Bitmap.Width - 1;
Height := Bitmap.Height - 1;
for j := 0 to Height do
begin
rowIn := Bitmap.ScanLine[j];
for i := 0 to Width do
begin
rowOut := Bmp.ScanLine[Height - j];
Inc(rowOut, Width - i);
rowOut^ := rowIn^;
Inc(rowIn);
end;
end;
Bmp.InvalidateScanLine;
Bitmap.InvalidateScanLine;
Bitmap.Assign(Bmp);
end;
procedure BMPRotate270(const Bitmap: TDLBitmap);
var
i, j: integer;
rowIn, rowOut: pRGBATriple;
Bmp: TDLBitmap;
Width, Height: integer;
begin
Bmp := TDLBitmap.Create;
Bmp.Width := Bitmap.Height;
Bmp.Height := Bitmap.Width;
Width := Bitmap.Width - 1;
Height := Bitmap.Height - 1;
for j := 0 to Height do
begin
rowIn := Bitmap.ScanLine[j];
for i := 0 to Width do
begin
rowOut := Bmp.ScanLine[Width - i];
Inc(rowOut, j);
rowOut^ := rowIn^;
Inc(rowIn);
end;
end;
Bmp.InvalidateScanLine;
Bitmap.Assign(Bmp);
end;
function RotateBitmap(Bitmap: TDLBitmap; Angle: integer; BackColor: TColor): TDLBitmap;
var
i, j, iOriginal, jOriginal, CosPoint, SinPoint: integer;
RowOriginal, RowRotated: pRGBATriple;
SinTheta, CosTheta: extended;
AngleAdd: integer;
begin
Result := TDLBitmap.Create;
Result.Canvas.Brush.Color := BackColor;
Angle := Angle mod 360;
if Angle < 0 then
Angle := 360 - Abs(Angle);
if Angle = 0 then
Result.Assign(Bitmap)
else if Angle = 90 then
begin
Result.Assign(Bitmap);
BMPRotate90(Result);
end
else if (Angle > 90) and (Angle < 180) then
begin
AngleAdd := 90;
Angle := Angle - AngleAdd;
end
else if Angle = 180 then
begin
Result.Assign(Bitmap);
BMPRotate180(Result);
end
else if (Angle > 180) and (Angle < 270) then
begin
AngleAdd := 180;
Angle := Angle - AngleAdd;
end
else if Angle = 270 then
begin
Result.Assign(Bitmap);
BMPRotate270(Result);
end
else if (Angle > 270) and (Angle < 360) then
begin
AngleAdd := 270;
Angle := Angle - AngleAdd;
end
else
AngleAdd := 0;
if (Angle > 0) and (Angle < 90) then
begin
SinCos((Angle + AngleAdd) * Pi / 180, SinTheta, CosTheta);
if (SinTheta * CosTheta) < 0 then
begin
Result.Width := Round(Abs(Bitmap.Width * CosTheta - Bitmap.Height * SinTheta));
Result.Height := Round(Abs(Bitmap.Width * SinTheta - Bitmap.Height * CosTheta));
end
else
begin
Result.Width := Round(Abs(Bitmap.Width * CosTheta + Bitmap.Height * SinTheta));
Result.Height := Round(Abs(Bitmap.Width * SinTheta + Bitmap.Height * CosTheta));
end;
CosTheta := Abs(CosTheta);
SinTheta := Abs(SinTheta);
if (AngleAdd = 0) or (AngleAdd = 180) then
begin
CosPoint := Round(Bitmap.Height * CosTheta);
SinPoint := Round(Bitmap.Height * SinTheta);
end
else
begin
SinPoint := Round(Bitmap.Width * CosTheta);
CosPoint := Round(Bitmap.Width * SinTheta);
end;
for j := 0 to Result.Height - 1 do
begin
RowRotated := Result.Scanline[j];
for i := 0 to Result.Width - 1 do
begin
case AngleAdd of
0:
begin
jOriginal := Round((j + 1) * CosTheta - (i + 1 - SinPoint) * SinTheta) - 1;
iOriginal := Round((i + 1) * CosTheta - (CosPoint - j - 1) * SinTheta) - 1;
end;
90:
begin
iOriginal := Round((j + 1) * SinTheta - (i + 1 - SinPoint) * CosTheta) - 1;
jOriginal := Bitmap.Height - Round((i + 1) * SinTheta -
(CosPoint - j - 1) * CosTheta);
end;
180:
begin
jOriginal := Bitmap.Height - Round((j + 1) * CosTheta -
(i + 1 - SinPoint) * SinTheta);
iOriginal := Bitmap.Width - Round((i + 1) * CosTheta -
(CosPoint - j - 1) * SinTheta);
end;
270:
begin
iOriginal := Bitmap.Width - Round((j + 1) * SinTheta -
(i + 1 - SinPoint) * CosTheta);
jOriginal := Round((i + 1) * SinTheta - (CosPoint - j - 1) * CosTheta) - 1;
end;
end;
if (iOriginal >= 0) and (iOriginal <= Bitmap.Width - 1) and
(jOriginal >= 0) and (jOriginal <= Bitmap.Height - 1) then
begin
RowOriginal := Bitmap.Scanline[jOriginal];
Inc(RowOriginal, iOriginal);
RowRotated^ := RowOriginal^;
Inc(RowRotated);
end
else
begin
Inc(RowRotated);
end;
end;
end;
end;
Result.InvalidateScanLine;
Bitmap.InvalidateScanLine;
end;
procedure DrawSamePixel(ABitmap: TDLBitmap; Value: integer);
var
LNew: TRGBATriple;
LMinusRatio: real;
LScan: pRGBATriple;
i, j: integer;
begin
for i := 0 to ABitmap.Height - 1 do
begin
LScan := ABitmap.Scanline[i];
for j := 0 to ABitmap.Width - 1 do
begin
LNew := LScan[j];
LScan[j].rgbtBlue := LScan[j].rgbtBlue * Value div 100; //Value; //LNew.rgbtBlue;
LScan[j].rgbtGreen := LScan[j].rgbtGreen * Value div 100; //LNew.rgbtGreen;
LScan[j].rgbtRed := LScan[j].rgbtRed * Value div 100; //LNew.rgbtRed;
end;
end;
ABitmap.InvalidateScanLine;
end;
function BitmapFlip(const Vertical: boolean; const Horizontal: boolean;
var BitmapIn: TDLBitmap; out BitmapOut: TDLBitmap): boolean;
var
DataIn: pRGBATriple;
DataOut: pRGBATriple;
inRow: integer;
inCol: integer;
begin
Result := False;
try
with BitmapOut do
begin
Width := BitmapIn.Width;
Height := BitmapIn.Height;
PixelFormat := BitmapIn.PixelFormat;
end;
for inRow := 0 to BitmapIn.Height - 1 do
begin
DataIn := BitmapIn.Scanline[inRow];
if Vertical then
begin
DataOut := BitmapOut.ScanLine[BitmapIn.Height - 1 - inRow];
end
else
begin
DataOut := BitmapOut.ScanLine[inRow];
end;
if Horizontal then
begin
for inCol := 0 to BitmapIn.Width - 1 do
DataOut[inCol] := DataIn[BitmapIn.Width - 1 - inCol];
end
else
begin
for inCol := 0 to BitmapIn.Width - 1 do
DataOut[inCol] := DataIn[inCol];
end;
end;
Result := True;
BitmapOut.InvalidateScanLine;
except
end;
end;
procedure InvertBitmap(aBitmap: TDLBitmap);
var
LNew: TRGBATriple;
LMinusRatio: real;
LScan: pRGBATriple;
i, j: integer;
begin
for i := 0 to ABitmap.Height - 1 do
begin
LScan := ABitmap.Scanline[i];
for j := 0 to ABitmap.Width - 1 do
begin
LNew := LScan[j];
LScan[j].rgbtBlue := not LScan[j].rgbtBlue;
LScan[j].rgbtGreen := not LScan[j].rgbtGreen;
LScan[j].rgbtRed := not LScan[j].rgbtRed;
end;
end;
ABitmap.InvalidateScanLine;
end;
procedure ConvertBitmapToGrayScale(const Bitmap: TDLBitmap);
var
X: integer;
Y: integer;
P: pRGBATriple;
Gray: byte;
begin
for Y := 0 to (Bitmap.Height - 1) do
begin
P := Bitmap.ScanLine[Y];
for X := 0 to (Bitmap.Width - 1) do
begin
Gray := Round(0.30 * P[X].rgbtBlue + 0.59 * P[X].rgbtGreen +
0.11 * P[X].rgbtRed);
P[X].rgbtRed := Gray;
P[X].rgbtGreen := Gray;
P[X].rgbtBlue := Gray;
end;
end;
Bitmap.InvalidateScanLine;
end;
constructor TDLBitmap.Create; constructor TDLBitmap.Create;
begin begin
inherited; inherited;
{$ifdef MSWINDOWS}
PixelFormat := pf32bit;
{$else}
PixelFormat := pf24bit; PixelFormat := pf24bit;
{$endif}
FIntfImgA := TLazIntfImage.Create(0, 0); FIntfImgA := TLazIntfImage.Create(0, 0);
end; end;
@ -665,6 +324,45 @@ begin
tmp.Free; tmp.Free;
end; end;
procedure TDLBitmap.RGBDelta(RedChange, GreenChange, BlueChange: integer);
var
tmp: TDLBitmap;
begin
tmp := TDLBitmap.Create;
tmp.Width := Width;
tmp.Height := Height;
tmp.Canvas.Draw(0, 0, Self);
ChangeRGB(Tmp, RedChange, GreenChange, BlueChange);
Canvas.Draw(0, 0, tmp);
tmp.Free;
end;
procedure TDLBitmap.Brightness(ValueChange: integer);
var
tmp: TDLBitmap;
begin
tmp := TDLBitmap.Create;
tmp.Width := Width;
tmp.Height := Height;
tmp.Canvas.Draw(0, 0, Self);
ChangeBrightness(Tmp, ValueChange);
Canvas.Draw(0, 0, tmp);
tmp.Free;
end;
procedure TDLBitmap.Contrast(ValueChange: integer);
var
tmp: TDLBitmap;
begin
tmp := TDLBitmap.Create;
tmp.Width := Width;
tmp.Height := Height;
tmp.Canvas.Draw(0, 0, Self);
ChangeContrast(Tmp, ValueChange);
Canvas.Draw(0, 0, tmp);
tmp.Free;
end;
procedure TDLBitmap.FillEllipse(X1, Y1, X2, Y2: integer); procedure TDLBitmap.FillEllipse(X1, Y1, X2, Y2: integer);
begin begin

View File

@ -0,0 +1,490 @@
{
These are the TDLBitmap process functions.
}
procedure LazBMPRotate90(const aBitmap: TDLBitmap; IsTurnRight: boolean);
var
i, j: integer;
rowIn, rowOut: PRGBATripleArray;
Bmp: TDLBitmap;
Width, Height: integer;
IntfImg1, IntfImg2: TLazIntfImage;
ImgHandle, ImgMaskHandle: HBitmap;
begin
Bmp := TDLBitmap.Create;
Bmp.Width := aBitmap.Height;
Bmp.Height := aBitmap.Width;
{$ifdef MSWINDOWS}
Bmp.PixelFormat := pf32bit;
{$else}
Bmp.PixelFormat := pf24bit;
{$endif}
IntfImg1 := TLazIntfImage.Create(0, 0);
IntfImg1.LoadFromBitmap(Bmp.Handle, Bmp.MaskHandle);
IntfImg2 := TLazIntfImage.Create(0, 0);
IntfImg2.LoadFromBitmap(aBitmap.Handle, aBitmap.MaskHandle);
Width := aBitmap.Width - 1;
Height := aBitmap.Height - 1;
for j := 0 to Height do
begin
rowIn := IntfImg2.GetDataLineStart(j);
for i := 0 to Width do
begin
rowOut := IntfImg1.GetDataLineStart(i);
if IsTurnRight then
rowOut^[Height - j] := rowIn^[i]
else
rowOut^[j] := rowIn^[Width - i];
end;
end;
IntfImg1.CreateBitmaps(ImgHandle, ImgMaskHandle, False);
Bmp.Handle := ImgHandle;
Bmp.MaskHandle := ImgMaskHandle;
IntfImg1.Free;
IntfImg2.Free;
aBitmap.Assign(Bmp);
Bmp.Free;
end;
procedure BMPRotate90(const Bitmap: TDLBitmap);
var
i, j: integer;
rowIn, rowOut: pRGBATriple;
Bmp: TDLBitmap;
Width, Height: integer;
begin
Bmp := TDLBitmap.Create;
Bmp.Width := Bitmap.Height;
Bmp.Height := Bitmap.Width;
Width := Bitmap.Width - 1;
Height := Bitmap.Height - 1;
for j := 0 to Height do
begin
rowIn := Bitmap.ScanLine[j];
for i := 0 to Width do
begin
rowOut := Bmp.ScanLine[i];
rowOut[Height - j] := rowIn[i];
end;
end;
Bmp.InvalidateScanLine;
Bitmap.Assign(Bmp);
end;
procedure BMPRotate180(const Bitmap: TDLBitmap);
var
i, j: integer;
rowIn, rowOut: pRGBATriple;
Bmp: TDLBitmap;
Width, Height: integer;
begin
Bmp := TDLBitmap.Create;
Bmp.Width := Bitmap.Width;
Bmp.Height := Bitmap.Height;
Width := Bitmap.Width - 1;
Height := Bitmap.Height - 1;
for j := 0 to Height do
begin
rowIn := Bitmap.ScanLine[j];
for i := 0 to Width do
begin
rowOut := Bmp.ScanLine[Height - j];
Inc(rowOut, Width - i);
rowOut^ := rowIn^;
Inc(rowIn);
end;
end;
Bmp.InvalidateScanLine;
Bitmap.InvalidateScanLine;
Bitmap.Assign(Bmp);
end;
procedure BMPRotate270(const Bitmap: TDLBitmap);
var
i, j: integer;
rowIn, rowOut: pRGBATriple;
Bmp: TDLBitmap;
Width, Height: integer;
begin
Bmp := TDLBitmap.Create;
Bmp.Width := Bitmap.Height;
Bmp.Height := Bitmap.Width;
Width := Bitmap.Width - 1;
Height := Bitmap.Height - 1;
for j := 0 to Height do
begin
rowIn := Bitmap.ScanLine[j];
for i := 0 to Width do
begin
rowOut := Bmp.ScanLine[Width - i];
Inc(rowOut, j);
rowOut^ := rowIn^;
Inc(rowIn);
end;
end;
Bmp.InvalidateScanLine;
Bitmap.Assign(Bmp);
end;
function RotateBitmap(Bitmap: TDLBitmap; Angle: integer; BackColor: TColor): TDLBitmap;
var
i, j, iOriginal, jOriginal, CosPoint, SinPoint: integer;
RowOriginal, RowRotated: pRGBATriple;
SinTheta, CosTheta: extended;
AngleAdd: integer;
begin
Result := TDLBitmap.Create;
Result.Canvas.Brush.Color := BackColor;
Angle := Angle mod 360;
if Angle < 0 then
Angle := 360 - Abs(Angle);
if Angle = 0 then
Result.Assign(Bitmap)
else if Angle = 90 then
begin
Result.Assign(Bitmap);
BMPRotate90(Result);
end
else if (Angle > 90) and (Angle < 180) then
begin
AngleAdd := 90;
Angle := Angle - AngleAdd;
end
else if Angle = 180 then
begin
Result.Assign(Bitmap);
BMPRotate180(Result);
end
else if (Angle > 180) and (Angle < 270) then
begin
AngleAdd := 180;
Angle := Angle - AngleAdd;
end
else if Angle = 270 then
begin
Result.Assign(Bitmap);
BMPRotate270(Result);
end
else if (Angle > 270) and (Angle < 360) then
begin
AngleAdd := 270;
Angle := Angle - AngleAdd;
end
else
AngleAdd := 0;
if (Angle > 0) and (Angle < 90) then
begin
SinCos((Angle + AngleAdd) * Pi / 180, SinTheta, CosTheta);
if (SinTheta * CosTheta) < 0 then
begin
Result.Width := Round(Abs(Bitmap.Width * CosTheta - Bitmap.Height * SinTheta));
Result.Height := Round(Abs(Bitmap.Width * SinTheta - Bitmap.Height * CosTheta));
end
else
begin
Result.Width := Round(Abs(Bitmap.Width * CosTheta + Bitmap.Height * SinTheta));
Result.Height := Round(Abs(Bitmap.Width * SinTheta + Bitmap.Height * CosTheta));
end;
CosTheta := Abs(CosTheta);
SinTheta := Abs(SinTheta);
if (AngleAdd = 0) or (AngleAdd = 180) then
begin
CosPoint := Round(Bitmap.Height * CosTheta);
SinPoint := Round(Bitmap.Height * SinTheta);
end
else
begin
SinPoint := Round(Bitmap.Width * CosTheta);
CosPoint := Round(Bitmap.Width * SinTheta);
end;
for j := 0 to Result.Height - 1 do
begin
RowRotated := Result.Scanline[j];
for i := 0 to Result.Width - 1 do
begin
case AngleAdd of
0:
begin
jOriginal := Round((j + 1) * CosTheta - (i + 1 - SinPoint) * SinTheta) - 1;
iOriginal := Round((i + 1) * CosTheta - (CosPoint - j - 1) * SinTheta) - 1;
end;
90:
begin
iOriginal := Round((j + 1) * SinTheta - (i + 1 - SinPoint) * CosTheta) - 1;
jOriginal := Bitmap.Height - Round((i + 1) * SinTheta -
(CosPoint - j - 1) * CosTheta);
end;
180:
begin
jOriginal := Bitmap.Height - Round((j + 1) * CosTheta -
(i + 1 - SinPoint) * SinTheta);
iOriginal := Bitmap.Width - Round((i + 1) * CosTheta -
(CosPoint - j - 1) * SinTheta);
end;
270:
begin
iOriginal := Bitmap.Width - Round((j + 1) * SinTheta -
(i + 1 - SinPoint) * CosTheta);
jOriginal := Round((i + 1) * SinTheta - (CosPoint - j - 1) * CosTheta) - 1;
end;
end;
if (iOriginal >= 0) and (iOriginal <= Bitmap.Width - 1) and
(jOriginal >= 0) and (jOriginal <= Bitmap.Height - 1) then
begin
RowOriginal := Bitmap.Scanline[jOriginal];
Inc(RowOriginal, iOriginal);
RowRotated^ := RowOriginal^;
Inc(RowRotated);
end
else
begin
Inc(RowRotated);
end;
end;
end;
end;
Result.InvalidateScanLine;
Bitmap.InvalidateScanLine;
end;
procedure DrawSamePixel(ABitmap: TDLBitmap; Value: integer);
var
LNew: TRGBATriple;
LMinusRatio: real;
LScan: pRGBATriple;
i, j: integer;
begin
for i := 0 to ABitmap.Height - 1 do
begin
LScan := ABitmap.Scanline[i];
for j := 0 to ABitmap.Width - 1 do
begin
LNew := LScan[j];
LScan[j].rgbtBlue := LScan[j].rgbtBlue * Value div 100; //Value; //LNew.rgbtBlue;
LScan[j].rgbtGreen := LScan[j].rgbtGreen * Value div 100; //LNew.rgbtGreen;
LScan[j].rgbtRed := LScan[j].rgbtRed * Value div 100; //LNew.rgbtRed;
end;
end;
ABitmap.InvalidateScanLine;
end;
function BitmapFlip(const Vertical: boolean; const Horizontal: boolean;
var BitmapIn: TDLBitmap; out BitmapOut: TDLBitmap): boolean;
var
DataIn: pRGBATriple;
DataOut: pRGBATriple;
inRow: integer;
inCol: integer;
begin
Result := False;
try
if BitmapIn.PixelFormat <> pf24bit then
Exit;
with BitmapOut do
begin
Width := BitmapIn.Width;
Height := BitmapIn.Height;
PixelFormat := BitmapIn.PixelFormat;
end;
for inRow := 0 to BitmapIn.Height - 1 do
begin
DataIn := BitmapIn.Scanline[inRow];
if Vertical then
begin
DataOut := BitmapOut.ScanLine[BitmapIn.Height - 1 - inRow];
end
else
begin
DataOut := BitmapOut.ScanLine[inRow];
end;
if Horizontal then
begin
for inCol := 0 to BitmapIn.Width - 1 do
DataOut[inCol] := DataIn[BitmapIn.Width - 1 - inCol];
end
else
begin
for inCol := 0 to BitmapIn.Width - 1 do
DataOut[inCol] := DataIn[inCol];
end;
end;
Result := True;
BitmapOut.InvalidateScanLine;
except
end;
end;
procedure InvertBitmap(aBitmap: TDLBitmap);
var
LNew: TRGBATriple;
LMinusRatio: real;
LScan: pRGBATriple;
i, j: integer;
begin
for i := 0 to ABitmap.Height - 1 do
begin
LScan := ABitmap.Scanline[i];
for j := 0 to ABitmap.Width - 1 do
begin
LNew := LScan[j];
LScan[j].rgbtBlue := not LScan[j].rgbtBlue;
LScan[j].rgbtGreen := not LScan[j].rgbtGreen;
LScan[j].rgbtRed := not LScan[j].rgbtRed;
end;
end;
ABitmap.InvalidateScanLine;
end;
procedure ConvertBitmapToGrayScale(const Bitmap: TDLBitmap);
var
X: integer;
Y: integer;
P: pRGBATriple;
Gray: byte;
begin
for Y := 0 to (Bitmap.Height - 1) do
begin
P := Bitmap.ScanLine[Y];
for X := 0 to (Bitmap.Width - 1) do
begin
Gray := Round(0.30 * P[X].rgbtBlue + 0.59 * P[X].rgbtGreen +
0.11 * P[X].rgbtRed);
P[X].rgbtRed := Gray;
P[X].rgbtGreen := Gray;
P[X].rgbtBlue := Gray;
end;
end;
Bitmap.InvalidateScanLine;
end;
procedure ChangeRGB(SrcBmp: TDLBitmap; RedChange, GreenChange, BlueChange: integer);
var
SrcRow, DestRow: pRGBATriple;
i, j: integer; DestBmp: TDLBitmap;
begin
DestBmp := TDLBitmap.Create;
DestBmp.Width := SrcBmp.Width;
DestBmp.Height := SrcBmp.Height;
for i := 0 to SrcBmp.Height - 1 do
begin
SrcRow := SrcBmp.ScanLine[i];
DestRow := DestBmp.ScanLine[i];
for j := 0 to SrcBmp.Width - 1 do
begin
if RedChange > 0 then
DestRow[j].rgbtRed :=
Min(255, SrcRow[j].rgbtRed + RedChange)
else
DestRow[j].rgbtRed :=
Max(0, SrcRow[j].rgbtRed + RedChange);
if GreenChange > 0 then
DestRow[j].rgbtGreen :=
Min(255, SrcRow[j].rgbtGreen + GreenChange)
else
DestRow[j].rgbtGreen :=
Max(0, SrcRow[j].rgbtGreen + GreenChange);
if BlueChange > 0 then
DestRow[j].rgbtBlue :=
Min(255, SrcRow[j].rgbtBlue + BlueChange)
else
DestRow[j].rgbtBlue :=
Max(0, SrcRow[j].rgbtBlue + BlueChange);
end;
end;
DestBmp.InvalidateScanLine;
SrcBmp.Assign(DestBmp);
DestBmp.Free;
end;
procedure ChangeBrightness(SrcBmp: TDLBitmap; ValueChange: integer);
var
i, j: integer; DestBmp: TDLBitmap;
SrcRow, DestRow: pRGBATriple;
begin
DestBmp := TDLBitmap.Create;
DestBmp.Width := SrcBmp.Width;
DestBmp.Height := SrcBmp.Height;
for i := 0 to SrcBmp.Height - 1 do
begin
SrcRow := SrcBmp.ScanLine[i];
DestRow := DestBmp.ScanLine[i];
for j := 0 to SrcBmp.Width - 1 do
begin
if ValueChange > 0 then
begin
DestRow[j].rgbtRed :=
Min(255, SrcRow[j].rgbtRed + ValueChange);
DestRow[j].rgbtGreen :=
Min(255, SrcRow[j].rgbtGreen + ValueChange);
DestRow[j].rgbtBlue :=
Min(255, SrcRow[j].rgbtBlue + ValueChange);
end
else
begin
DestRow[j].rgbtRed := Max(0, SrcRow[j].rgbtRed + ValueChange);
DestRow[j].rgbtGreen :=
Max(0, SrcRow[j].rgbtGreen + ValueChange);
DestRow[j].rgbtBlue :=
Max(0, SrcRow[j].rgbtBlue + ValueChange);
end;
end;
end;
DestBmp.InvalidateScanLine;
SrcBmp.Assign(DestBmp);
DestBmp.Free;
end;
procedure ChangeContrast(SrcBmp: TDLBitmap; ValueChange: integer);
var
X, Y: integer; DestBmp: TDLBitmap;
SrcRow, DestRow: pRGBATriple;
begin
DestBmp := TDLBitmap.Create;
DestBmp.Width := SrcBmp.Width;
DestBmp.Height := SrcBmp.Height;
if valuechange >= 0 then
begin
for Y := 0 to SrcBmp.Height - 1 do
begin
SrcRow := SrcBmp.ScanLine[Y];
DestRow := DestBmp.ScanLine[y];
for X := 0 to SrcBmp.Width - 1 do
begin
if SrcRow[x].rgbtRed >= 128 then
DestRow[x].rgbtRed := min(255, SrcRow[x].rgbtRed + ValueChange)
else
DestRow[x].rgbtRed := max(0, SrcRow[x].rgbtRed - ValueChange);
if SrcRow[x].rgbtGreen >= 128 then
DestRow[x].rgbtGreen := min(255, SrcRow[x].rgbtGreen + ValueChange)
else
DestRow[x].rgbtGreen :=
max(0, SrcRow[x].rgbtGreen - ValueChange);
if SrcRow[x].rgbtBlue >= 128 then
DestRow[x].rgbtBlue := min(255, SrcRow[x].rgbtBlue + ValueChange)
else
DestRow[x].rgbtBlue :=
max(0, SrcRow[x].rgbtBlue - ValueChange);
end;
end;
end
else
begin
for Y := 0 to SrcBmp.Height - 1 do
begin
SrcRow := SrcBmp.ScanLine[Y];
DestRow := DestBmp.ScanLine[y];
for X := 0 to SrcBmp.Width - 1 do
begin
DestRow[x].rgbtRed := min(128, SrcRow[x].rgbtRed - ValueChange);
DestRow[x].rgbtGreen :=
min(128, SrcRow[x].rgbtGreen - ValueChange);
DestRow[x].rgbtBlue := min(128, SrcRow[x].rgbtBlue - ValueChange);
end;
end;
end;
DestBmp.InvalidateScanLine;
SrcBmp.Assign(DestBmp);
DestBmp.Free;
end;

View File

@ -49,8 +49,8 @@
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<CursorPos X="73" Y="11"/> <CursorPos X="14" Y="4"/>
<UsageCount Value="62"/> <UsageCount Value="64"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
@ -62,19 +62,20 @@
<UnitName Value="Main"/> <UnitName Value="Main"/>
<EditorIndex Value="0"/> <EditorIndex Value="0"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="756"/> <TopLine Value="1203"/>
<CursorPos X="72" Y="769"/> <CursorPos X="30" Y="1220"/>
<UsageCount Value="62"/> <UsageCount Value="64"/>
<Loaded Value="True"/> <Loaded Value="True"/>
<LoadedDesigner Value="True"/> <LoadedDesigner Value="True"/>
</Unit1> </Unit1>
<Unit2> <Unit2>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<UnitName Value="PictureCtrls"/> <UnitName Value="PictureCtrls"/>
<EditorIndex Value="5"/> <IsVisibleTab Value="True"/>
<EditorIndex Value="4"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="831"/> <TopLine Value="117"/>
<CursorPos X="51" Y="849"/> <CursorPos X="24" Y="137"/>
<UsageCount Value="28"/> <UsageCount Value="28"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit2> </Unit2>
@ -178,10 +179,10 @@
<Unit13> <Unit13>
<Filename Value="picturemanager.pas"/> <Filename Value="picturemanager.pas"/>
<UnitName Value="PictureManager"/> <UnitName Value="PictureManager"/>
<EditorIndex Value="3"/> <EditorIndex Value="2"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="188"/> <TopLine Value="1"/>
<CursorPos X="62" Y="103"/> <CursorPos X="100" Y="4"/>
<UsageCount Value="29"/> <UsageCount Value="29"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit13> </Unit13>
@ -244,10 +245,10 @@
<Unit21> <Unit21>
<Filename Value="bmprgbtypes.pas"/> <Filename Value="bmprgbtypes.pas"/>
<UnitName Value="BmpRGBTypes"/> <UnitName Value="BmpRGBTypes"/>
<EditorIndex Value="7"/> <EditorIndex Value="6"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="119"/> <TopLine Value="539"/>
<CursorPos X="24" Y="44"/> <CursorPos X="40" Y="535"/>
<UsageCount Value="26"/> <UsageCount Value="26"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit21> </Unit21>
@ -277,7 +278,7 @@
<Unit25> <Unit25>
<Filename Value="bmprgbutils.pas"/> <Filename Value="bmprgbutils.pas"/>
<UnitName Value="BmpRGBUtils"/> <UnitName Value="BmpRGBUtils"/>
<EditorIndex Value="6"/> <EditorIndex Value="5"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="85"/> <TopLine Value="85"/>
<CursorPos X="72" Y="5"/> <CursorPos X="72" Y="5"/>
@ -303,10 +304,10 @@
<Unit28> <Unit28>
<Filename Value="bmprgbgraph.pas"/> <Filename Value="bmprgbgraph.pas"/>
<UnitName Value="BmpRGBGraph"/> <UnitName Value="BmpRGBGraph"/>
<EditorIndex Value="8"/> <EditorIndex Value="7"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="20"/> <TopLine Value="500"/>
<CursorPos X="76" Y="25"/> <CursorPos X="27" Y="532"/>
<UsageCount Value="20"/> <UsageCount Value="20"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit28> </Unit28>
@ -363,10 +364,10 @@
<Unit35> <Unit35>
<Filename Value="DLBitmap.pas"/> <Filename Value="DLBitmap.pas"/>
<UnitName Value="DLBitmap"/> <UnitName Value="DLBitmap"/>
<EditorIndex Value="4"/> <EditorIndex Value="3"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="631"/> <TopLine Value="10"/>
<CursorPos X="61" Y="336"/> <CursorPos X="102" Y="6"/>
<UsageCount Value="11"/> <UsageCount Value="11"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit35> </Unit35>
@ -374,142 +375,139 @@
<Filename Value="T:\LazColorPalette\colorpalette.pas"/> <Filename Value="T:\LazColorPalette\colorpalette.pas"/>
<UnitName Value="ColorPalette"/> <UnitName Value="ColorPalette"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="183"/> <TopLine Value="185"/>
<CursorPos X="53" Y="201"/> <CursorPos X="58" Y="173"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit36> </Unit36>
<Unit37> <Unit37>
<Filename Value="colorpalette.pas"/> <Filename Value="colorpalette.pas"/>
<UnitName Value="ColorPalette"/> <UnitName Value="ColorPalette"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="2"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="56"/> <TopLine Value="56"/>
<CursorPos X="21" Y="68"/> <CursorPos X="21" Y="68"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit37> </Unit37>
</Units> </Units>
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="30" HistoryIndex="29">
<Position1> <Position1>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="725" Column="35" TopLine="708"/> <Caret Line="2" Column="101" TopLine="1"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="286" Column="33" TopLine="270"/> <Caret Line="109" Column="54" TopLine="77"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="733" Column="68" TopLine="705"/> <Caret Line="657" Column="41" TopLine="625"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1122" Column="10" TopLine="1120"/> <Caret Line="681" Column="25" TopLine="649"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1123" Column="10" TopLine="1121"/> <Caret Line="109" Column="54" TopLine="90"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1130" Column="10" TopLine="1128"/> <Caret Line="657" Column="41" TopLine="625"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="473" Column="3" TopLine="460"/> <Caret Line="8" Column="78" TopLine="1"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="479" Column="6" TopLine="457"/> <Caret Line="179" Column="22" TopLine="147"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="795" Column="7" TopLine="763"/> <Caret Line="197" Column="18" TopLine="165"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="797" Column="7" TopLine="765"/> <Caret Line="272" Column="32" TopLine="240"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="799" Column="37" TopLine="767"/> <Caret Line="276" Column="28" TopLine="244"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="800" Column="40" TopLine="768"/> <Caret Line="386" Column="37" TopLine="363"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="4" Column="99" TopLine="1"/> <Caret Line="391" Column="42" TopLine="375"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="463" Column="51" TopLine="431"/> <Caret Line="578" Column="38" TopLine="558"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="479" Column="7" TopLine="447"/> <Caret Line="582" Column="44" TopLine="558"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="5" Column="101" TopLine="1"/> <Caret Line="606" Column="34" TopLine="586"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="497" Column="11" TopLine="476"/> <Caret Line="610" Column="25" TopLine="586"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="501" Column="6" TopLine="475"/> <Caret Line="797" Column="29" TopLine="777"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="500" Column="6" TopLine="474"/> <Caret Line="798" Column="16" TopLine="777"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="1007" Column="12" TopLine="988"/> <Caret Line="887" Column="16" TopLine="864"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="lazimageeditor.pas"/> <Filename Value="main.pas"/>
<Caret Line="26" Column="11" TopLine="1"/> <Caret Line="1031" Column="16" TopLine="1011"/>
</Position21> </Position21>
<Position22> <Position22>
<Filename Value="lazimageeditor.pas"/> <Filename Value="main.pas"/>
<Caret Line="11" Column="30" TopLine="1"/> <Caret Line="1033" Column="43" TopLine="1011"/>
</Position22> </Position22>
<Position23> <Position23>
<Filename Value="lazimageeditor.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="26" Column="6" TopLine="1"/> <Caret Line="681" Column="29" TopLine="649"/>
</Position23> </Position23>
<Position24> <Position24>
<Filename Value="lazimageeditor.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="11" Column="30" TopLine="1"/> <Caret Line="171" Column="15" TopLine="152"/>
</Position24> </Position24>
<Position25> <Position25>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="767" Column="1" TopLine="748"/> <Caret Line="916" Column="7" TopLine="897"/>
</Position25> </Position25>
<Position26> <Position26>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="772" Column="3" TopLine="769"/> <Caret Line="879" Column="12" TopLine="857"/>
</Position26> </Position26>
<Position27> <Position27>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="749" Column="1" TopLine="743"/> <Caret Line="874" Column="3" TopLine="861"/>
</Position27> </Position27>
<Position28> <Position28>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="774" Column="47" TopLine="754"/> <Caret Line="878" Column="25" TopLine="861"/>
</Position28> </Position28>
<Position29> <Position29>
<Filename Value="main.pas"/> <Filename Value="bmprgbtypes.pas"/>
<Caret Line="289" Column="1" TopLine="273"/> <Caret Line="126" Column="29" TopLine="107"/>
</Position29> </Position29>
<Position30> <Position30>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="724" Column="1" TopLine="708"/> <Caret Line="859" Column="24" TopLine="852"/>
</Position30> </Position30>
</JumpHistory> </JumpHistory>
</ProjectOptions> </ProjectOptions>

View File

@ -1,11 +1,11 @@
object MainForm: TMainForm object MainForm: TMainForm
Left = 180 Left = 260
Height = 666 Height = 681
Top = 135 Top = 147
Width = 905 Width = 935
Caption = 'Lazarus Image Editor' Caption = 'Lazarus Image Editor'
ClientHeight = 644 ClientHeight = 659
ClientWidth = 905 ClientWidth = 935
Font.CharSet = GB2312_CHARSET Font.CharSet = GB2312_CHARSET
Font.Height = -13 Font.Height = -13
Font.Name = '微软雅黑' Font.Name = '微软雅黑'
@ -18,18 +18,18 @@
LCLVersion = '0.9.31' LCLVersion = '0.9.31'
object PanelTools: TPanel object PanelTools: TPanel
Left = 0 Left = 0
Height = 517 Height = 532
Top = 105 Top = 105
Width = 40 Width = 40
Align = alLeft Align = alLeft
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 517 ClientHeight = 532
ClientWidth = 40 ClientWidth = 40
ParentColor = False ParentColor = False
TabOrder = 0 TabOrder = 0
object ToolBarTools: TToolBar object ToolBarTools: TToolBar
Left = 0 Left = 0
Height = 517 Height = 532
Top = 0 Top = 0
Width = 40 Width = 40
Align = alLeft Align = alLeft
@ -120,7 +120,7 @@
end end
object ToolRectangle: TToolButton object ToolRectangle: TToolButton
Left = 0 Left = 0
Hint = 'Polygon' Hint = 'RecTangle / Round Rectangle'
Top = 202 Top = 202
Grouped = True Grouped = True
ImageIndex = 5 ImageIndex = 5
@ -131,7 +131,7 @@
end end
object ToolPolygon: TToolButton object ToolPolygon: TToolButton
Left = 0 Left = 0
Hint = 'Ellipse' Hint = 'Polygon'
Top = 282 Top = 282
Grouped = True Grouped = True
ImageIndex = 7 ImageIndex = 7
@ -142,7 +142,7 @@
end end
object ToolEllipse: TToolButton object ToolEllipse: TToolButton
Left = 0 Left = 0
Hint = 'Rectangle/Round rectangle' Hint = 'Ellipse'
Top = 242 Top = 242
Grouped = True Grouped = True
ImageIndex = 6 ImageIndex = 6
@ -156,8 +156,8 @@
object StatusBar: TStatusBar object StatusBar: TStatusBar
Left = 0 Left = 0
Height = 22 Height = 22
Top = 622 Top = 637
Width = 905 Width = 935
Panels = < Panels = <
item item
Width = 250 Width = 250
@ -182,19 +182,19 @@
SimplePanel = False SimplePanel = False
end end
object PanelPallete: TPanel object PanelPallete: TPanel
Left = 830 Left = 860
Height = 517 Height = 532
Top = 105 Top = 105
Width = 75 Width = 75
Align = alRight Align = alRight
AutoSize = True AutoSize = True
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 517 ClientHeight = 532
ClientWidth = 75 ClientWidth = 75
TabOrder = 1 TabOrder = 1
object Palette: TColorPalette object Palette: TColorPalette
Left = 0 Left = 0
Height = 517 Height = 532
Top = 0 Top = 0
Width = 75 Width = 75
Align = alClient Align = alClient
@ -209,17 +209,17 @@
Left = 0 Left = 0
Height = 105 Height = 105
Top = 0 Top = 0
Width = 905 Width = 935
Align = alTop Align = alTop
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 105 ClientHeight = 105
ClientWidth = 905 ClientWidth = 935
TabOrder = 2 TabOrder = 2
object Bevel1: TBevel object Bevel1: TBevel
Left = 0 Left = 0
Height = 2 Height = 2
Top = 69 Top = 69
Width = 905 Width = 935
Align = alTop Align = alTop
Shape = bsBottomLine Shape = bsBottomLine
end end
@ -227,7 +227,7 @@
Left = 0 Left = 0
Height = 2 Height = 2
Top = 33 Top = 33
Width = 905 Width = 935
Align = alTop Align = alTop
Shape = bsBottomLine Shape = bsBottomLine
end end
@ -235,7 +235,7 @@
Left = 0 Left = 0
Height = 33 Height = 33
Top = 0 Top = 0
Width = 905 Width = 935
ButtonHeight = 32 ButtonHeight = 32
ButtonWidth = 36 ButtonWidth = 36
Color = clBtnFace Color = clBtnFace
@ -402,14 +402,14 @@
end end
end end
object ZoomInBtn: TToolButton object ZoomInBtn: TToolButton
Left = 385 Left = 498
Top = 0 Top = 0
Caption = 'ZoomInBtn' Caption = 'ZoomInBtn'
ImageIndex = 10 ImageIndex = 10
OnClick = ZoomInBtnClick OnClick = ZoomInBtnClick
end end
object ZoomOutBtn: TToolButton object ZoomOutBtn: TToolButton
Left = 498 Left = 385
Top = 0 Top = 0
Caption = 'ZoomOutBtn' Caption = 'ZoomOutBtn'
ImageIndex = 11 ImageIndex = 11
@ -420,13 +420,13 @@
Left = 0 Left = 0
Height = 34 Height = 34
Top = 35 Top = 35
Width = 905 Width = 935
Align = alTop Align = alTop
BorderSpacing.InnerBorder = 4 BorderSpacing.InnerBorder = 4
BorderSpacing.CellAlignVertical = ccaCenter BorderSpacing.CellAlignVertical = ccaCenter
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 34 ClientHeight = 34
ClientWidth = 905 ClientWidth = 935
TabOrder = 1 TabOrder = 1
object LabelFillOutline: TLabel object LabelFillOutline: TLabel
Left = 103 Left = 103
@ -462,7 +462,7 @@
ParentColor = False ParentColor = False
end end
object PanelColors: TPanel object PanelColors: TPanel
Left = 693 Left = 723
Height = 34 Height = 34
Top = 0 Top = 0
Width = 212 Width = 212
@ -1054,11 +1054,11 @@
Left = 0 Left = 0
Height = 34 Height = 34
Top = 71 Top = 71
Width = 905 Width = 935
Align = alTop Align = alTop
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 34 ClientHeight = 34
ClientWidth = 905 ClientWidth = 935
TabOrder = 2 TabOrder = 2
object LabelSize: TLabel object LabelSize: TLabel
Left = 0 Left = 0
@ -1292,9 +1292,9 @@
TabOrder = 5 TabOrder = 5
object checkFuzzy: TCheckBox object checkFuzzy: TCheckBox
Left = 4 Left = 4
Height = 23 Height = 19
Top = 9 Top = 9
Width = 24 Width = 20
OnChange = checkFuzzyChange OnChange = checkFuzzyChange
TabOrder = 0 TabOrder = 0
end end
@ -1303,9 +1303,9 @@
end end
object PanelPictures: TPanel object PanelPictures: TPanel
Left = 40 Left = 40
Height = 517 Height = 532
Top = 105 Top = 105
Width = 790 Width = 820
Align = alClient Align = alClient
BevelOuter = bvLowered BevelOuter = bvLowered
TabOrder = 3 TabOrder = 3

View File

@ -1,166 +1,152 @@
{ This is an automatically generated lazarus resource file } { This is an automatically generated lazarus resource file }
LazarusResources.Add('TMainForm','FORMDATA',[ LazarusResources.Add('TMainForm','FORMDATA',[
'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#3#180#0#6'Height'#3#154#2#3'Top'#3#135 'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#3#4#1#6'Height'#3#169#2#3'Top'#3#147#0
+#0#5'Width'#3#137#3#7'Caption'#6#20'Lazarus Image Editor'#12'ClientHeight'#3 +#5'Width'#3#167#3#7'Caption'#6#20'Lazarus Image Editor'#12'ClientHeight'#3
+#132#2#11'ClientWidth'#3#137#3#12'Font.CharSet'#7#14'GB2312_CHARSET'#11'Font' +#147#2#11'ClientWidth'#3#167#3#12'Font.CharSet'#7#14'GB2312_CHARSET'#11'Font'
+'.Height'#2#243#9'Font.Name'#6#12#229#190#174#232#189#175#233#155#133#233#187 +'.Height'#2#243#9'Font.Name'#6#12#229#190#174#232#189#175#233#155#133#233#187
+#145#10'Font.Pitch'#7#10'fpVariable'#12'Font.Quality'#7#7'fqDraft'#4'Menu'#7 +#145#10'Font.Pitch'#7#10'fpVariable'#12'Font.Quality'#7#7'fqDraft'#4'Menu'#7
+#8'MainMenu'#12'OnCloseQuery'#7#14'FormCloseQuery'#8'OnCreate'#7#10'FormCrea' +#8'MainMenu'#12'OnCloseQuery'#7#14'FormCloseQuery'#8'OnCreate'#7#10'FormCrea'
+'te'#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#6'0.9.31'#0#6'TPanel'#10'Panel' +'te'#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#6'0.9.31'#0#6'TPanel'#10'Panel'
+'Tools'#4'Left'#2#0#6'Height'#3#5#2#3'Top'#2'i'#5'Width'#2'('#5'Align'#7#6'a' +'Tools'#4'Left'#2#0#6'Height'#3#20#2#3'Top'#2'i'#5'Width'#2'('#5'Align'#7#6
+'lLeft'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#3#5#2#11'ClientWidth'#2 +'alLeft'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#3#20#2#11'ClientWidth'#2
+'('#11'ParentColor'#8#8'TabOrder'#2#0#0#8'TToolBar'#12'ToolBarTools'#4'Left' +'('#11'ParentColor'#8#8'TabOrder'#2#0#0#8'TToolBar'#12'ToolBarTools'#4'Left'
+#2#0#6'Height'#3#5#2#3'Top'#2#0#5'Width'#2'('#5'Align'#7#6'alLeft'#12'Button' +#2#0#6'Height'#3#20#2#3'Top'#2#0#5'Width'#2'('#5'Align'#7#6'alLeft'#12'Butto'
+'Height'#2'('#11'ButtonWidth'#2'('#7'Caption'#6#12'ToolBarTools'#21'Constrai' +'nHeight'#2'('#11'ButtonWidth'#2'('#7'Caption'#6#12'ToolBarTools'#21'Constra'
+'nts.MinHeight'#3#146#1#6'Images'#7#14'ImageListTools'#6'Indent'#2#0#8'TabOr' +'ints.MinHeight'#3#146#1#6'Images'#7#14'ImageListTools'#6'Indent'#2#0#8'TabO'
+'der'#2#0#0#11'TToolButton'#9'ToolSpray'#4'Left'#2#0#4'Hint'#6#5'Spray'#3'To' +'rder'#2#0#0#11'TToolButton'#9'ToolSpray'#4'Left'#2#0#4'Hint'#6#5'Spray'#3'T'
+'p'#3'j'#1#7'Grouped'#9#10'ImageIndex'#2#9#7'OnClick'#7#14'ToolSprayClick'#14 +'op'#3'j'#1#7'Grouped'#9#10'ImageIndex'#2#9#7'OnClick'#7#14'ToolSprayClick'
+'ParentShowHint'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'#0#0#11'TToolButton'
+#13'ToolFloodFill'#4'Left'#2#0#4'Hint'#6#10'Flood Fill'#3'Top'#3'B'#1#7'Grou'
+'ped'#9#10'ImageIndex'#2#8#7'OnClick'#7#18'ToolFloodFillClick'#14'ParentShow'
+'Hint'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'#0#0#11'TToolButton'#10'ToolEra'
+'ser'#4'Left'#2#0#4'Hint'#6#15'Eraser/Replacer'#3'Top'#2'z'#7'Grouped'#9#10
+'ImageIndex'#2#3#7'OnClick'#7#15'ToolEraserClick'#14'ParentShowHint'#8#8'Sho'
+'wHint'#9#5'Style'#7#8'tbsCheck'#0#0#11'TToolButton'#7'ToolPen'#4'Left'#2#0#4
+'Hint'#6#3'Pen'#3'Top'#2'R'#7'Grouped'#9#10'ImageIndex'#2#2#7'OnClick'#7#12
+'ToolPenClick'#14'ParentShowHint'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'#0#0
+#11'TToolButton'#13'ToolColorPick'#4'Left'#2#0#4'Hint'#6#10'Color Pick'#3'To'
+'p'#2'*'#7'Grouped'#9#10'ImageIndex'#2#1#7'OnClick'#7#18'ToolColorPickClick'
+#14'ParentShowHint'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'#0#0#11'TToolButto' +#14'ParentShowHint'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'#0#0#11'TToolButto'
+'n'#8'ToolMask'#4'Left'#2#0#4'Hint'#6#4'Mask'#3'Top'#2#2#7'Grouped'#9#10'Ima' +'n'#13'ToolFloodFill'#4'Left'#2#0#4'Hint'#6#10'Flood Fill'#3'Top'#3'B'#1#7'G'
+'geIndex'#2#0#7'OnClick'#7#13'ToolMaskClick'#14'ParentShowHint'#8#8'ShowHint' +'rouped'#9#10'ImageIndex'#2#8#7'OnClick'#7#18'ToolFloodFillClick'#14'ParentS'
+#9#5'Style'#7#8'tbsCheck'#0#0#11'TToolButton'#8'ToolLine'#4'Left'#2#0#4'Hint' +'howHint'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'#0#0#11'TToolButton'#10'Tool'
+#6#4'Line'#3'Top'#3#162#0#4'Down'#9#7'Grouped'#9#10'ImageIndex'#2#4#7'OnClic' +'Eraser'#4'Left'#2#0#4'Hint'#6#15'Eraser/Replacer'#3'Top'#2'z'#7'Grouped'#9
+'k'#7#13'ToolLineClick'#14'ParentShowHint'#8#8'ShowHint'#9#5'Style'#7#8'tbsC' +#10'ImageIndex'#2#3#7'OnClick'#7#15'ToolEraserClick'#14'ParentShowHint'#8#8
+'heck'#0#0#11'TToolButton'#13'ToolRectangle'#4'Left'#2#0#4'Hint'#6#7'Polygon' +'ShowHint'#9#5'Style'#7#8'tbsCheck'#0#0#11'TToolButton'#7'ToolPen'#4'Left'#2
+#3'Top'#3#202#0#7'Grouped'#9#10'ImageIndex'#2#5#7'OnClick'#7#18'ToolRectangl' +#0#4'Hint'#6#3'Pen'#3'Top'#2'R'#7'Grouped'#9#10'ImageIndex'#2#2#7'OnClick'#7
+'eClick'#14'ParentShowHint'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'#0#0#11'TT' +#12'ToolPenClick'#14'ParentShowHint'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'#0
+'oolButton'#11'ToolPolygon'#4'Left'#2#0#4'Hint'#6#7'Ellipse'#3'Top'#3#26#1#7 +#0#11'TToolButton'#13'ToolColorPick'#4'Left'#2#0#4'Hint'#6#10'Color Pick'#3
+'Grouped'#9#10'ImageIndex'#2#7#7'OnClick'#7#16'ToolPolygonClick'#14'ParentSh' +'Top'#2'*'#7'Grouped'#9#10'ImageIndex'#2#1#7'OnClick'#7#18'ToolColorPickClic'
+'owHint'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'#0#0#11'TToolButton'#11'ToolE' +'k'#14'ParentShowHint'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'#0#0#11'TToolBu'
+'llipse'#4'Left'#2#0#4'Hint'#6#25'Rectangle/Round rectangle'#3'Top'#3#242#0#7 +'tton'#8'ToolMask'#4'Left'#2#0#4'Hint'#6#4'Mask'#3'Top'#2#2#7'Grouped'#9#10
+'Grouped'#9#10'ImageIndex'#2#6#7'OnClick'#7#12'ToolEllClick'#14'ParentShowHi' +'ImageIndex'#2#0#7'OnClick'#7#13'ToolMaskClick'#14'ParentShowHint'#8#8'ShowH'
+'nt'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'#0#0#0#0#10'TStatusBar'#9'StatusB' +'int'#9#5'Style'#7#8'tbsCheck'#0#0#11'TToolButton'#8'ToolLine'#4'Left'#2#0#4
+'ar'#4'Left'#2#0#6'Height'#2#22#3'Top'#3'n'#2#5'Width'#3#137#3#6'Panels'#14#1 +'Hint'#6#4'Line'#3'Top'#3#162#0#4'Down'#9#7'Grouped'#9#10'ImageIndex'#2#4#7
+#5'Width'#3#250#0#0#1#9'Alignment'#7#8'taCenter'#5'Width'#2'P'#0#1#9'Alignme' +'OnClick'#7#13'ToolLineClick'#14'ParentShowHint'#8#8'ShowHint'#9#5'Style'#7#8
+'nt'#7#8'taCenter'#5'Width'#2'P'#0#1#5'Width'#2'P'#0#1#5'Width'#2'P'#0#1#5'W' +'tbsCheck'#0#0#11'TToolButton'#13'ToolRectangle'#4'Left'#2#0#4'Hint'#6#27'Re'
+'idth'#2'2'#0#0#11'SimplePanel'#8#0#0#6'TPanel'#12'PanelPallete'#4'Left'#3'>' +'cTangle / Round Rectangle'#3'Top'#3#202#0#7'Grouped'#9#10'ImageIndex'#2#5#7
+#3#6'Height'#3#5#2#3'Top'#2'i'#5'Width'#2'K'#5'Align'#7#7'alRight'#8'AutoSiz' +'OnClick'#7#18'ToolRectangleClick'#14'ParentShowHint'#8#8'ShowHint'#9#5'Styl'
+'e'#9#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#3#5#2#11'ClientWidth'#2'K' +'e'#7#8'tbsCheck'#0#0#11'TToolButton'#11'ToolPolygon'#4'Left'#2#0#4'Hint'#6#7
+#8'TabOrder'#2#1#0#13'TColorPalette'#7'Palette'#4'Left'#2#0#6'Height'#3#5#2#3 +'Polygon'#3'Top'#3#26#1#7'Grouped'#9#10'ImageIndex'#2#7#7'OnClick'#7#16'Tool'
+'Top'#2#0#5'Width'#2'K'#5'Align'#7#8'alClient'#11'ButtonWidth'#2#12#12'Butto' +'PolygonClick'#14'ParentShowHint'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'#0#0
+'nHeight'#2#12#8'DragMode'#7#11'dmAutomatic'#16'OnColorMouseMove'#7#21'Palet' +#11'TToolButton'#11'ToolEllipse'#4'Left'#2#0#4'Hint'#6#7'Ellipse'#3'Top'#3
+'teColorMouseMove'#11'OnColorPick'#7#16'PaletteColorPick'#0#0#0#6'TPanel'#12 +#242#0#7'Grouped'#9#10'ImageIndex'#2#6#7'OnClick'#7#12'ToolEllClick'#14'Pare'
+'PanelToolBar'#4'Left'#2#0#6'Height'#2'i'#3'Top'#2#0#5'Width'#3#137#3#5'Alig' +'ntShowHint'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'#0#0#0#0#10'TStatusBar'#9
+'n'#7#5'alTop'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#2'i'#11'ClientWid' +'StatusBar'#4'Left'#2#0#6'Height'#2#22#3'Top'#3'}'#2#5'Width'#3#167#3#6'Pane'
+'th'#3#137#3#8'TabOrder'#2#2#0#6'TBevel'#6'Bevel1'#4'Left'#2#0#6'Height'#2#2 +'ls'#14#1#5'Width'#3#250#0#0#1#9'Alignment'#7#8'taCenter'#5'Width'#2'P'#0#1#9
+#3'Top'#2'E'#5'Width'#3#137#3#5'Align'#7#5'alTop'#5'Shape'#7#12'bsBottomLine' +'Alignment'#7#8'taCenter'#5'Width'#2'P'#0#1#5'Width'#2'P'#0#1#5'Width'#2'P'#0
+#0#0#6'TBevel'#6'Bevel2'#4'Left'#2#0#6'Height'#2#2#3'Top'#2'!'#5'Width'#3#137 +#1#5'Width'#2'2'#0#0#11'SimplePanel'#8#0#0#6'TPanel'#12'PanelPallete'#4'Left'
+#3#5'Align'#7#5'alTop'#5'Shape'#7#12'bsBottomLine'#0#0#8'TToolBar'#7'ToolBar' +#3'\'#3#6'Height'#3#20#2#3'Top'#2'i'#5'Width'#2'K'#5'Align'#7#7'alRight'#8'A'
+#4'Left'#2#0#6'Height'#2'!'#3'Top'#2#0#5'Width'#3#137#3#12'ButtonHeight'#2' ' +'utoSize'#9#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#3#20#2#11'ClientWidt'
+#11'ButtonWidth'#2'$'#5'Color'#7#9'clBtnFace'#11'EdgeBorders'#11#0#6'Images' +'h'#2'K'#8'TabOrder'#2#1#0#13'TColorPalette'#7'Palette'#4'Left'#2#0#6'Height'
+#7#16'ImageListActions'#11'ParentColor'#8#8'TabOrder'#2#0#0#11'TToolButton'#9 +#3#20#2#3'Top'#2#0#5'Width'#2'K'#5'Align'#7#8'alClient'#11'ButtonWidth'#2#12
+'ToolClose'#4'Left'#2'm'#4'Hint'#6#5'Close'#3'Top'#2#0#7'Caption'#6#6'&Close' +#12'ButtonHeight'#2#12#8'DragMode'#7#11'dmAutomatic'#16'OnColorMouseMove'#7
+#10'ImageIndex'#2#3#7'OnClick'#7#16'FileCloseExecute'#14'ParentShowHint'#8#8 +#21'PaletteColorMouseMove'#11'OnColorPick'#7#16'PaletteColorPick'#0#0#0#6'TP'
+'ShowHint'#9#0#0#11'TToolButton'#8'ToolSave'#4'Left'#2'I'#4'Hint'#6#4'Save'#3 +'anel'#12'PanelToolBar'#4'Left'#2#0#6'Height'#2'i'#3'Top'#2#0#5'Width'#3#167
+'Top'#2#0#7'Caption'#6#5'&Save'#10'ImageIndex'#2#2#7'OnClick'#7#15'FileSaveE' +#3#5'Align'#7#5'alTop'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#2'i'#11'C'
,'xecute'#14'ParentShowHint'#8#8'ShowHint'#9#0#0#11'TToolButton'#8'ToolOpen'#4 +'lientWidth'#3#167#3#8'TabOrder'#2#2#0#6'TBevel'#6'Bevel1'#4'Left'#2#0#6'Hei'
+'Left'#2'%'#4'Hint'#6#4'Open'#3'Top'#2#0#7'Caption'#6#8'&Open...'#10'ImageIn' +'ght'#2#2#3'Top'#2'E'#5'Width'#3#167#3#5'Align'#7#5'alTop'#5'Shape'#7#12'bsB'
+'dex'#2#1#7'OnClick'#7#15'FileOpenExecute'#14'ParentShowHint'#8#8'ShowHint'#9 +'ottomLine'#0#0#6'TBevel'#6'Bevel2'#4'Left'#2#0#6'Height'#2#2#3'Top'#2'!'#5
+#0#0#11'TToolButton'#7'ToolNew'#4'Left'#2#1#4'Hint'#6#3'New'#3'Top'#2#0#7'Ca' +'Width'#3#167#3#5'Align'#7#5'alTop'#5'Shape'#7#12'bsBottomLine'#0#0#8'TToolB'
+'ption'#6#7'&New...'#10'ImageIndex'#2#0#7'OnClick'#7#14'FileNewExecute'#14'P' +'ar'#7'ToolBar'#4'Left'#2#0#6'Height'#2'!'#3'Top'#2#0#5'Width'#3#167#3#12'Bu'
+'arentShowHint'#8#8'ShowHint'#9#0#0#11'TToolButton'#11'ToolButton6'#4'Left'#3 +'ttonHeight'#2' '#11'ButtonWidth'#2'$'#5'Color'#7#9'clBtnFace'#11'EdgeBorder'
+#145#0#3'Top'#2#0#5'Width'#2#8#7'Caption'#6#11'ToolButton6'#5'Style'#7#12'tb' +'s'#11#0#6'Images'#7#16'ImageListActions'#11'ParentColor'#8#8'TabOrder'#2#0#0
+'sSeparator'#0#0#11'TToolButton'#7'ToolCut'#4'Left'#3#233#0#4'Hint'#6#3'Cut' +#11'TToolButton'#9'ToolClose'#4'Left'#2'm'#4'Hint'#6#5'Close'#3'Top'#2#0#7'C'
+#3'Top'#2#0#7'Caption'#6#4'Cu&t'#7'Enabled'#8#10'ImageIndex'#2#6#7'OnClick'#7 +'aption'#6#6'&Close'#10'ImageIndex'#2#3#7'OnClick'#7#16'FileCloseExecute'#14
+#14'EditCutExecute'#14'ParentShowHint'#8#8'ShowHint'#9#0#0#11'TToolButton'#11 +'ParentShowHint'#8#8'ShowHint'#9#0#0#11'TToolButton'#8'ToolSave'#4'Left'#2'I'
+'ToolButton8'#4'Left'#3#13#1#4'Hint'#6#4'Copy'#3'Top'#2#0#7'Caption'#6#5'&Co' +#4'Hint'#6#4'Save'#3'Top'#2#0#7'Caption'#6#5'&Save'#10'ImageIndex'#2#2#7'OnC'
+'py'#7'Enabled'#8#10'ImageIndex'#2#7#7'OnClick'#7#15'EditCopyExecute'#14'Par' ,'lick'#7#15'FileSaveExecute'#14'ParentShowHint'#8#8'ShowHint'#9#0#0#11'TTool'
+'entShowHint'#8#8'ShowHint'#9#0#0#11'TToolButton'#11'ToolButton9'#4'Left'#3 +'Button'#8'ToolOpen'#4'Left'#2'%'#4'Hint'#6#4'Open'#3'Top'#2#0#7'Caption'#6#8
+'1'#1#4'Hint'#6#5'Paste'#3'Top'#2#0#7'Caption'#6#6'&Paste'#7'Enabled'#8#10'I' +'&Open...'#10'ImageIndex'#2#1#7'OnClick'#7#15'FileOpenExecute'#14'ParentShow'
+'mageIndex'#2#8#7'OnClick'#7#16'EditPasteExecute'#14'ParentShowHint'#8#8'Sho' +'Hint'#8#8'ShowHint'#9#0#0#11'TToolButton'#7'ToolNew'#4'Left'#2#1#4'Hint'#6#3
+'wHint'#9#0#0#11'TToolButton'#12'ToolButton10'#4'Left'#3'y'#1#3'Top'#2#0#5'W' +'New'#3'Top'#2#0#7'Caption'#6#7'&New...'#10'ImageIndex'#2#0#7'OnClick'#7#14
+'idth'#2#8#7'Caption'#6#12'ToolButton10'#5'Style'#7#12'tbsSeparator'#0#0#11 +'FileNewExecute'#14'ParentShowHint'#8#8'ShowHint'#9#0#0#11'TToolButton'#11'T'
+'TToolButton'#12'ToolButton11'#4'Left'#3'U'#1#4'Hint'#6#6'Delete'#3'Top'#2#0 +'oolButton6'#4'Left'#3#145#0#3'Top'#2#0#5'Width'#2#8#7'Caption'#6#11'ToolBut'
+#7'Caption'#6#7'&Delete'#7'Enabled'#8#10'ImageIndex'#2#9#7'OnClick'#7#17'Edi' +'ton6'#5'Style'#7#12'tbsSeparator'#0#0#11'TToolButton'#7'ToolCut'#4'Left'#3
+'tDeleteExecute'#14'ParentShowHint'#8#8'ShowHint'#9#0#0#11'TToolButton'#8'To' +#233#0#4'Hint'#6#3'Cut'#3'Top'#2#0#7'Caption'#6#4'Cu&t'#7'Enabled'#8#10'Imag'
+'olUndo'#4'Left'#3#153#0#4'Hint'#6#4'Undo'#3'Top'#2#0#7'Caption'#6#5'&Undo'#7 +'eIndex'#2#6#7'OnClick'#7#14'EditCutExecute'#14'ParentShowHint'#8#8'ShowHint'
+'Enabled'#8#10'ImageIndex'#2#4#14'ParentShowHint'#8#8'ShowHint'#9#0#0#11'TTo' +#9#0#0#11'TToolButton'#11'ToolButton8'#4'Left'#3#13#1#4'Hint'#6#4'Copy'#3'To'
+'olButton'#11'ToolButton2'#4'Left'#3#225#0#3'Top'#2#0#5'Width'#2#8#7'Caption' +'p'#2#0#7'Caption'#6#5'&Copy'#7'Enabled'#8#10'ImageIndex'#2#7#7'OnClick'#7#15
+#6#11'ToolButton2'#5'Style'#7#12'tbsSeparator'#0#0#11'TToolButton'#8'ToolRed' +'EditCopyExecute'#14'ParentShowHint'#8#8'ShowHint'#9#0#0#11'TToolButton'#11
+'o'#4'Left'#3#189#0#4'Hint'#6#4'Redo'#3'Top'#2#0#7'Caption'#6#5'&Redo'#7'Ena' +'ToolButton9'#4'Left'#3'1'#1#4'Hint'#6#5'Paste'#3'Top'#2#0#7'Caption'#6#6'&P'
+'bled'#8#10'ImageIndex'#2#5#14'ParentShowHint'#8#8'ShowHint'#9#0#0#6'TPanel' +'aste'#7'Enabled'#8#10'ImageIndex'#2#8#7'OnClick'#7#16'EditPasteExecute'#14
+#9'PanelZoom'#4'Left'#3#165#1#6'Height'#2' '#3'Top'#2#0#5'Width'#2'M'#10'Bev' +'ParentShowHint'#8#8'ShowHint'#9#0#0#11'TToolButton'#12'ToolButton10'#4'Left'
+'elOuter'#7#6'bvNone'#12'ClientHeight'#2' '#11'ClientWidth'#2'M'#8'TabOrder' +#3'y'#1#3'Top'#2#0#5'Width'#2#8#7'Caption'#6#12'ToolButton10'#5'Style'#7#12
+#2#0#0#9'TComboBox'#12'ComboBoxZoom'#4'Left'#2#0#6'Height'#2#27#3'Top'#2#2#5 +'tbsSeparator'#0#0#11'TToolButton'#12'ToolButton11'#4'Left'#3'U'#1#4'Hint'#6
+'Width'#2'L'#7'Anchors'#11#6'akLeft'#0#10'ItemHeight'#2#19#9'ItemIndex'#2#2 +#6'Delete'#3'Top'#2#0#7'Caption'#6#7'&Delete'#7'Enabled'#8#10'ImageIndex'#2#9
+#13'Items.Strings'#1#6#4'25 %'#6#4'50 %'#6#5'100 %'#6#5'200 %'#6#5'400 %'#6#5 +#7'OnClick'#7#17'EditDeleteExecute'#14'ParentShowHint'#8#8'ShowHint'#9#0#0#11
+'800 %'#6#6'1000 %'#0#8'OnChange'#7#18'ComboBoxZoomChange'#13'OnEditingDone' +'TToolButton'#8'ToolUndo'#4'Left'#3#153#0#4'Hint'#6#4'Undo'#3'Top'#2#0#7'Cap'
+#7#23'ComboBoxZoomEditingDone'#14'ParentShowHint'#8#8'TabOrder'#2#0#4'Text'#6 +'tion'#6#5'&Undo'#7'Enabled'#8#10'ImageIndex'#2#4#14'ParentShowHint'#8#8'Sho'
+#5'100 %'#0#0#0#11'TToolButton'#9'ZoomInBtn'#4'Left'#3#129#1#3'Top'#2#0#7'Ca' +'wHint'#9#0#0#11'TToolButton'#11'ToolButton2'#4'Left'#3#225#0#3'Top'#2#0#5'W'
+'ption'#6#9'ZoomInBtn'#10'ImageIndex'#2#10#7'OnClick'#7#14'ZoomInBtnClick'#0 +'idth'#2#8#7'Caption'#6#11'ToolButton2'#5'Style'#7#12'tbsSeparator'#0#0#11'T'
+#0#11'TToolButton'#10'ZoomOutBtn'#4'Left'#3#242#1#3'Top'#2#0#7'Caption'#6#10 +'ToolButton'#8'ToolRedo'#4'Left'#3#189#0#4'Hint'#6#4'Redo'#3'Top'#2#0#7'Capt'
+'ZoomOutBtn'#10'ImageIndex'#2#11#7'OnClick'#7#15'ZoomOutBtnClick'#0#0#0#6'TP' +'ion'#6#5'&Redo'#7'Enabled'#8#10'ImageIndex'#2#5#14'ParentShowHint'#8#8'Show'
+'anel'#12'PanelOptions'#4'Left'#2#0#6'Height'#2'"'#3'Top'#2'#'#5'Width'#3#137 +'Hint'#9#0#0#6'TPanel'#9'PanelZoom'#4'Left'#3#165#1#6'Height'#2' '#3'Top'#2#0
+#3#5'Align'#7#5'alTop'#25'BorderSpacing.InnerBorder'#2#4#31'BorderSpacing.Ce' +#5'Width'#2'M'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#2' '#11'ClientWid'
+'llAlignVertical'#7#9'ccaCenter'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight' +'th'#2'M'#8'TabOrder'#2#0#0#9'TComboBox'#12'ComboBoxZoom'#4'Left'#2#0#6'Heig'
+#2'"'#11'ClientWidth'#3#137#3#8'TabOrder'#2#1#0#6'TLabel'#16'LabelFillOutlin' +'ht'#2#27#3'Top'#2#2#5'Width'#2'L'#7'Anchors'#11#6'akLeft'#0#10'ItemHeight'#2
+'e'#4'Left'#2'g'#6'Height'#2'"'#3'Top'#2#0#5'Width'#2'H'#5'Align'#7#6'alLeft' +#19#9'ItemIndex'#2#2#13'Items.Strings'#1#6#4'25 %'#6#4'50 %'#6#5'100 %'#6#5
+#7'Caption'#6#14'Fill, Outline:'#21'Constraints.MinHeight'#2' '#6'Layout'#7#8 +'200 %'#6#5'400 %'#6#5'800 %'#6#6'1000 %'#0#8'OnChange'#7#18'ComboBoxZoomCha'
+'tlCenter'#11'ParentColor'#8#0#0#6'TLabel'#10'LabelShape'#4'Left'#2#0#6'Heig' +'nge'#13'OnEditingDone'#7#23'ComboBoxZoomEditingDone'#14'ParentShowHint'#8#8
+'ht'#2'"'#3'Top'#2#0#5'Width'#2'*'#5'Align'#7#6'alLeft'#7'Caption'#6#6'Shape' +'TabOrder'#2#0#4'Text'#6#5'100 %'#0#0#0#11'TToolButton'#9'ZoomInBtn'#4'Left'
+':'#21'Constraints.MinHeight'#2' '#6'Layout'#7#8'tlCenter'#11'ParentColor'#8 +#3#242#1#3'Top'#2#0#7'Caption'#6#9'ZoomInBtn'#10'ImageIndex'#2#10#7'OnClick'
+#0#0#6'TLabel'#13'LabelMaskTool'#4'Left'#3#2#1#6'Height'#2'"'#3'Top'#2#0#5'W' +#7#14'ZoomInBtnClick'#0#0#11'TToolButton'#10'ZoomOutBtn'#4'Left'#3#129#1#3'T'
+'idth'#2'C'#5'Align'#7#6'alLeft'#7'Caption'#6#10'Mask Tool:'#21'Constraints.' +'op'#2#0#7'Caption'#6#10'ZoomOutBtn'#10'ImageIndex'#2#11#7'OnClick'#7#15'Zoo'
+'MinHeight'#2' '#6'Layout'#7#8'tlCenter'#11'ParentColor'#8#0#0#6'TPanel'#11 +'mOutBtnClick'#0#0#0#6'TPanel'#12'PanelOptions'#4'Left'#2#0#6'Height'#2'"'#3
+'PanelColors'#4'Left'#3#181#2#6'Height'#2'"'#3'Top'#2#0#5'Width'#3#212#0#5'A' +'Top'#2'#'#5'Width'#3#167#3#5'Align'#7#5'alTop'#25'BorderSpacing.InnerBorder'
+'lign'#7#7'alRight'#8'AutoSize'#9#25'BorderSpacing.InnerBorder'#2#4'!BorderS' +#2#4#31'BorderSpacing.CellAlignVertical'#7#9'ccaCenter'#10'BevelOuter'#7#6'b'
+'pacing.CellAlignHorizontal'#7#10'ccaLeftTop'#31'BorderSpacing.CellAlignVert' +'vNone'#12'ClientHeight'#2'"'#11'ClientWidth'#3#167#3#8'TabOrder'#2#1#0#6'TL'
+'ical'#7#9'ccaCenter'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#2'"'#11'Cl' +'abel'#16'LabelFillOutline'#4'Left'#2'g'#6'Height'#2'"'#3'Top'#2#0#5'Width'#2
+'ientWidth'#3#212#0#8'TabOrder'#2#0#0#6'TLabel'#12'LabelOutline'#4'Left'#2#8 +'H'#5'Align'#7#6'alLeft'#7'Caption'#6#14'Fill, Outline:'#21'Constraints.MinH'
+#6'Height'#2'"'#3'Top'#2#0#5'Width'#2'1'#5'Align'#7#7'alRight'#7'Caption'#6#8 +'eight'#2' '#6'Layout'#7#8'tlCenter'#11'ParentColor'#8#0#0#6'TLabel'#10'Labe'
+'Outline:'#6'Layout'#7#8'tlCenter'#11'ParentColor'#8#0#0#6'TLabel'#9'LabelFi' +'lShape'#4'Left'#2#0#6'Height'#2'"'#3'Top'#2#0#5'Width'#2'*'#5'Align'#7#6'al'
+'ll'#4'Left'#2'Y'#6'Height'#2'"'#3'Top'#2#0#5'Width'#2#20#5'Align'#7#7'alRig' +'Left'#7'Caption'#6#6'Shape:'#21'Constraints.MinHeight'#2' '#6'Layout'#7#8't'
+'ht'#7'Caption'#6#5'Fill:'#6'Layout'#7#8'tlCenter'#11'ParentColor'#8#0#0#6'T' +'lCenter'#11'ParentColor'#8#0#0#6'TLabel'#13'LabelMaskTool'#4'Left'#3#2#1#6
+'Label'#10'LabelPaper'#4'Left'#3#141#0#6'Height'#2'"'#3'Top'#2#0#5'Width'#2 +'Height'#2'"'#3'Top'#2#0#5'Width'#2'C'#5'Align'#7#6'alLeft'#7'Caption'#6#10
+''''#5'Align'#7#7'alRight'#7'Caption'#6#6'Paper:'#6'Layout'#7#8'tlCenter'#11 +'Mask Tool:'#21'Constraints.MinHeight'#2' '#6'Layout'#7#8'tlCenter'#11'Paren'
+'ParentColor'#8#0#0#6'TPanel'#12'PanelOutline'#4'Left'#2'?'#6'Height'#2#22#3 +'tColor'#8#0#0#6'TPanel'#11'PanelColors'#4'Left'#3#211#2#6'Height'#2'"'#3'To'
+'Top'#2#6#5'Width'#2#20#5'Align'#7#7'alRight'#20'BorderSpacing.Around'#2#6#10 +'p'#2#0#5'Width'#3#212#0#5'Align'#7#7'alRight'#8'AutoSize'#9#25'BorderSpacin'
+'BevelInner'#7#9'bvLowered'#5'Color'#7#7'clWhite'#8'DragMode'#7#11'dmAutomat' +'g.InnerBorder'#2#4'!BorderSpacing.CellAlignHorizontal'#7#10'ccaLeftTop'#31
+'ic'#11'ParentColor'#8#8'TabOrder'#2#0#10'OnDragOver'#7#18'PanelPaperDragOve' +'BorderSpacing.CellAlignVertical'#7#9'ccaCenter'#10'BevelOuter'#7#6'bvNone'
,'r'#0#0#6'TPanel'#9'PanelFill'#4'Left'#2's'#6'Height'#2#22#3'Top'#2#6#5'Widt' +#12'ClientHeight'#2'"'#11'ClientWidth'#3#212#0#8'TabOrder'#2#0#0#6'TLabel'#12
+'h'#2#20#5'Align'#7#7'alRight'#20'BorderSpacing.Around'#2#6#10'BevelInner'#7 +'LabelOutline'#4'Left'#2#8#6'Height'#2'"'#3'Top'#2#0#5'Width'#2'1'#5'Align'#7
+#9'bvLowered'#5'Color'#7#7'clWhite'#8'DragMode'#7#11'dmAutomatic'#11'ParentC' +#7'alRight'#7'Caption'#6#8'Outline:'#6'Layout'#7#8'tlCenter'#11'ParentColor'
+'olor'#8#8'TabOrder'#2#1#10'OnDragOver'#7#18'PanelPaperDragOver'#0#0#6'TPane' +#8#0#0#6'TLabel'#9'LabelFill'#4'Left'#2'Y'#6'Height'#2'"'#3'Top'#2#0#5'Width'
+'l'#10'PanelPaper'#4'Left'#3#186#0#6'Height'#2#22#3'Top'#2#6#5'Width'#2#20#5 +#2#20#5'Align'#7#7'alRight'#7'Caption'#6#5'Fill:'#6'Layout'#7#8'tlCenter'#11
+'Align'#7#7'alRight'#20'BorderSpacing.Around'#2#6#10'BevelInner'#7#9'bvLower' +'ParentColor'#8#0#0#6'TLabel'#10'LabelPaper'#4'Left'#3#141#0#6'Height'#2'"'#3
+'ed'#5'Color'#7#7'clWhite'#8'DragMode'#7#11'dmAutomatic'#11'ParentColor'#8#8 +'Top'#2#0#5'Width'#2''''#5'Align'#7#7'alRight'#7'Caption'#6#6'Paper:'#6'Layo'
+'TabOrder'#2#2#10'OnDblClick'#7#18'PanelPaperDblClick'#10'OnDragOver'#7#18'P' +'ut'#7#8'tlCenter'#11'ParentColor'#8#0#0#6'TPanel'#12'PanelOutline'#4'Left'#2
+'anelPaperDragOver'#0#0#0#6'TPanel'#16'PanelFillOutline'#4'Left'#3#175#0#6'H' +'?'#6'Height'#2#22#3'Top'#2#6#5'Width'#2#20#5'Align'#7#7'alRight'#20'BorderS'
+'eight'#2'"'#3'Top'#2#0#5'Width'#2'S'#5'Align'#7#6'alLeft'#10'BevelOuter'#7#6 +'pacing.Around'#2#6#10'BevelInner'#7#9'bvLowered'#5'Color'#7#7'clWhite'#8'Dr'
+'bvNone'#12'ClientHeight'#2'"'#11'ClientWidth'#2'S'#8'TabOrder'#2#1#0#12'TSp' +'agMode'#7#11'dmAutomatic'#11'ParentColor'#8#8'TabOrder'#2#0#10'OnDragOver'#7
+'eedButton'#15'ToolFillOutline'#4'Left'#2#4#6'Height'#2#24#3'Top'#2#5#5'Widt' ,#18'PanelPaperDragOver'#0#0#6'TPanel'#9'PanelFill'#4'Left'#2's'#6'Height'#2
+'h'#2#25#7'Anchors'#11#6'akLeft'#0#4'Down'#9#10'Glyph.Data'#10#234#4#0#0#230 +#22#3'Top'#2#6#5'Width'#2#20#5'Align'#7#7'alRight'#20'BorderSpacing.Around'#2
+#4#0#0'BM'#230#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#20#0#0#0#20#0#0#0#1#0#24#0#0#0 +#6#10'BevelInner'#7#9'bvLowered'#5'Color'#7#7'clWhite'#8'DragMode'#7#11'dmAu'
+#0#0#176#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +'tomatic'#11'ParentColor'#8#8'TabOrder'#2#1#10'OnDragOver'#7#18'PanelPaperDr'
+'agOver'#0#0#6'TPanel'#10'PanelPaper'#4'Left'#3#186#0#6'Height'#2#22#3'Top'#2
+#6#5'Width'#2#20#5'Align'#7#7'alRight'#20'BorderSpacing.Around'#2#6#10'Bevel'
+'Inner'#7#9'bvLowered'#5'Color'#7#7'clWhite'#8'DragMode'#7#11'dmAutomatic'#11
+'ParentColor'#8#8'TabOrder'#2#2#10'OnDblClick'#7#18'PanelPaperDblClick'#10'O'
+'nDragOver'#7#18'PanelPaperDragOver'#0#0#0#6'TPanel'#16'PanelFillOutline'#4
+'Left'#3#175#0#6'Height'#2'"'#3'Top'#2#0#5'Width'#2'S'#5'Align'#7#6'alLeft'
+#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#2'"'#11'ClientWidth'#2'S'#8'Tab'
+'Order'#2#1#0#12'TSpeedButton'#15'ToolFillOutline'#4'Left'#2#4#6'Height'#2#24
+#3'Top'#2#5#5'Width'#2#25#7'Anchors'#11#6'akLeft'#0#4'Down'#9#10'Glyph.Data'
+#10#234#4#0#0#230#4#0#0'BM'#230#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#20#0#0#0#20#0
+#0#0#1#0#24#0#0#0#0#0#176#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#0#0#0#0#0#0
+#0#0#0#0#0#0#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128 +#0#0#0#0#0#0#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128 +#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#0#0#0#0#0#0#0#0#0#0#0#0 +#128#128#128#128#128#128#128#128#128#128#128#128#128#0#0#0#0#0#0#0#0#0#0#0#0
@ -192,31 +178,45 @@ LazarusResources.Add('TMainForm','FORMDATA',[
+#128#128#128#128#128#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#128#128#128#128#128 +#128#128#128#128#128#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128 +#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128 +#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#128#128#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#0#0
+#0#0#0#0#0#0#0#0#0#0#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#0#0#0#0#0#0#0#0
+#0#0#0#0#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#0#0#0#0#0#0#0#0#0#0#0#0#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128#128
+#128#128#128#128#128#128#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#10'GroupIndex'#2#1#9'NumGlyphs'#2#0#7'OnCli' +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#10'GroupIndex'#2#1#9'NumGly'
+'ck'#7#20'ToolFillOutlineClick'#0#0#12'TSpeedButton'#11'ToolOutline'#4'Left' +'phs'#2#0#7'OnClick'#7#20'ToolFillOutlineClick'#0#0#12'TSpeedButton'#11'Tool'
+#2#29#6'Height'#2#24#3'Top'#2#5#5'Width'#2#25#7'Anchors'#11#6'akLeft'#0#10'G' +'Outline'#4'Left'#2#29#6'Height'#2#24#3'Top'#2#5#5'Width'#2#25#7'Anchors'#11
+'lyph.Data'#10'z'#6#0#0'v'#6#0#0'BMv'#6#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#20#0#0 +#6'akLeft'#0#10'Glyph.Data'#10'z'#6#0#0'v'#6#0#0'BMv'#6#0#0#0#0#0#0'6'#0#0#0
+#0#20#0#0#0#1#0' '#0#0#0#0#0'@'#6#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +'('#0#0#0#20#0#0#0#20#0#0#0#1#0' '#0#0#0#0#0'@'#6#0#0'd'#0#0#0'd'#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#255#255#255#0#255#255
+#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0#0#255#0#0#0#255#0#0
+#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#0#255#0#0#0#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#255#255#255#0#255#255#255#0 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0#0#255#0#0#0#255#0#0
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0#0#255#0#0#0#255#0#0#0 +#0#255#0#0#0#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#0#0#0#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#255#255#255#0#255#255 +#255#255#255#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#255#255#255#0#255#255
@ -678,8 +678,8 @@ LazarusResources.Add('TMainForm','FORMDATA',[
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#10'Gr' +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#10'Gr'
+'oupIndex'#2#1#9'NumGlyphs'#2#0#7'OnClick'#7#22'ToolMaskFloodFillClick'#0#0#0 +'oupIndex'#2#1#9'NumGlyphs'#2#0#7'OnClick'#7#22'ToolMaskFloodFillClick'#0#0#0
+#0#6'TPanel'#16'PanelToolOptions'#4'Left'#2#0#6'Height'#2'"'#3'Top'#2'G'#5'W' +#0#6'TPanel'#16'PanelToolOptions'#4'Left'#2#0#6'Height'#2'"'#3'Top'#2'G'#5'W'
+'idth'#3#137#3#5'Align'#7#5'alTop'#10'BevelOuter'#7#6'bvNone'#12'ClientHeigh' +'idth'#3#167#3#5'Align'#7#5'alTop'#10'BevelOuter'#7#6'bvNone'#12'ClientHeigh'
+'t'#2'"'#11'ClientWidth'#3#137#3#8'TabOrder'#2#2#0#6'TLabel'#9'LabelSize'#4 +'t'#2'"'#11'ClientWidth'#3#167#3#8'TabOrder'#2#2#0#6'TLabel'#9'LabelSize'#4
+'Left'#2#0#6'Height'#2'"'#3'Top'#2#0#5'Width'#2#28#5'Align'#7#6'alLeft'#7'Ca' +'Left'#2#0#6'Height'#2'"'#3'Top'#2#0#5'Width'#2#28#5'Align'#7#6'alLeft'#7'Ca'
+'ption'#6#5'Size:'#21'Constraints.MinHeight'#2' '#6'Layout'#7#8'tlCenter'#11 +'ption'#6#5'Size:'#21'Constraints.MinHeight'#2' '#6'Layout'#7#8'tlCenter'#11
+'ParentColor'#8#0#0#6'TLabel'#12'LabelDensity'#4'Left'#3#234#0#6'Height'#2'"' +'ParentColor'#8#0#0#6'TLabel'#12'LabelDensity'#4'Left'#3#234#0#6'Height'#2'"'
@ -733,12 +733,12 @@ LazarusResources.Add('TMainForm','FORMDATA',[
+'rentColor'#8#0#0#6'TPanel'#15'PanelTolerance2'#4'Left'#3#134#2#6'Height'#2 +'rentColor'#8#0#0#6'TPanel'#15'PanelTolerance2'#4'Left'#3#134#2#6'Height'#2
+'"'#3'Top'#2#0#5'Width'#2#30#5'Align'#7#6'alLeft'#10'BevelOuter'#7#6'bvNone' +'"'#3'Top'#2#0#5'Width'#2#30#5'Align'#7#6'alLeft'#10'BevelOuter'#7#6'bvNone'
+#12'ClientHeight'#2'"'#11'ClientWidth'#2#30#8'TabOrder'#2#5#0#9'TCheckBox'#10 +#12'ClientHeight'#2'"'#11'ClientWidth'#2#30#8'TabOrder'#2#5#0#9'TCheckBox'#10
+'checkFuzzy'#4'Left'#2#4#6'Height'#2#23#3'Top'#2#9#5'Width'#2#24#8'OnChange' +'checkFuzzy'#4'Left'#2#4#6'Height'#2#19#3'Top'#2#9#5'Width'#2#20#8'OnChange'
+#7#16'checkFuzzyChange'#8'TabOrder'#2#0#0#0#0#0#0#6'TPanel'#13'PanelPictures' +#7#16'checkFuzzyChange'#8'TabOrder'#2#0#0#0#0#0#0#6'TPanel'#13'PanelPictures'
+#4'Left'#2'('#6'Height'#3#5#2#3'Top'#2'i'#5'Width'#3#22#3#5'Align'#7#8'alCli' +#4'Left'#2'('#6'Height'#3#20#2#3'Top'#2'i'#5'Width'#3'4'#3#5'Align'#7#8'alCl'
+'ent'#10'BevelOuter'#7#9'bvLowered'#8'TabOrder'#2#3#0#0#9'TMainMenu'#8'MainM' +'ient'#10'BevelOuter'#7#9'bvLowered'#8'TabOrder'#2#3#0#0#9'TMainMenu'#8'Main'
+'enu'#6'Images'#7#16'ImageListActions'#4'left'#2'r'#3'top'#2'~'#0#9'TMenuIte' +'Menu'#6'Images'#7#16'ImageListActions'#4'left'#2'r'#3'top'#2'~'#0#9'TMenuIt'
+'m'#12'MenuItemFile'#7'Caption'#6#5'&File'#0#9'TMenuItem'#11'MenuItemNew'#7 +'em'#12'MenuItemFile'#7'Caption'#6#5'&File'#0#9'TMenuItem'#11'MenuItemNew'#7
+'Caption'#6#7'&New...'#11'Bitmap.Data'#10'z'#6#0#0'v'#6#0#0'BMv'#6#0#0#0#0#0 +'Caption'#6#7'&New...'#11'Bitmap.Data'#10'z'#6#0#0'v'#6#0#0'BMv'#6#0#0#0#0#0
+#0'6'#0#0#0'('#0#0#0#20#0#0#0#20#0#0#0#1#0' '#0#0#0#0#0'@'#6#0#0'd'#0#0#0'd' +#0'6'#0#0#0'('#0#0#0#20#0#0#0#20#0#0#0#1#0' '#0#0#0#0#0'@'#6#0#0'd'#0#0#0'd'
+#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#0#0#0#31#0#0#0#254#4#4#4 +#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#0#0#0#31#0#0#0#254#4#4#4

View File

@ -473,7 +473,10 @@ begin
else else
S := Trim(ComboBoxZoom.Text); S := Trim(ComboBoxZoom.Text);
E := StrToInt(S); E := StrToInt(S);
V := E + 10; if E < 100 then
V := E + 10
else
V := E + 100;
if V <= 0 then if V <= 0 then
V := 100; V := 100;
ActivePictureEdit.Zoom := V / 100; ActivePictureEdit.Zoom := V / 100;
@ -492,7 +495,10 @@ begin
else else
S := Trim(ComboBoxZoom.Text); S := Trim(ComboBoxZoom.Text);
E := StrToInt(S); E := StrToInt(S);
V := E - 10; if E <= 100 then
V := E - 10
else
V := E - 100;
if V <= 0 then if V <= 0 then
V := 100; V := 100;
ActivePictureEdit.Zoom := V / 100; ActivePictureEdit.Zoom := V / 100;

View File

@ -672,8 +672,7 @@ begin
Canvas.Pen.Mode := pmNot; Canvas.Pen.Mode := pmNot;
Canvas.Brush.Style := bsClear; Canvas.Brush.Style := bsClear;
S := PictureToClient(Point(X1, Y1)); S := PictureToClient(Point(X1, Y1));
E := PictureToClient(Point(X2, Y2)); E := PictureToClient(Point(X2, Y2));
R := Round(RectangleRoundness * Zoom); R := Round(RectangleRoundness * Zoom);
@ -874,7 +873,7 @@ begin
else else
begin begin
if FFillAlpha = 100 then if FFillAlpha = 100 then
Picture.Canvas.Rectangle(X1, Y1, X2, Y2) Picture.Canvas.RoundRect(X1, Y1, X2, Y2, FRectangleRoundness, FRectangleRoundness)
else else
Picture.AlphaRectangle(X1, Y1, X2, Y2, FFillAlpha); Picture.AlphaRectangle(X1, Y1, X2, Y2, FFillAlpha);
end; end;