You've already forked lazarus-ccr
spray and brush work.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1594 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
unit DLBitmap;
|
||||
unit DLBitmap;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
@ -65,7 +65,8 @@ type
|
||||
procedure CopyToClipboard; virtual;
|
||||
procedure PasteFromClipboard; virtual;
|
||||
procedure Delete; virtual;
|
||||
procedure FloodFill (x,y:integer);
|
||||
procedure FloodFill(x, y: integer);
|
||||
procedure Spray(x, y, radian: integer; PColor: TColor);
|
||||
property FillColor: TColor read GetFillColor write SetFillColor;
|
||||
property OutlineColor: TColor read GetOutlineColor write SetOutlineColor;
|
||||
property PaperColor: TColor read GetPaperColor write SetPaperColor;
|
||||
@ -83,6 +84,10 @@ procedure InvertBitmap(aBitmap: TDLBitmap);
|
||||
procedure ChangeRGB(SrcBmp: TDLBitmap; RedChange, GreenChange, BlueChange: integer);
|
||||
procedure ChangeBrightness(SrcBmp: TDLBitmap; ValueChange: integer);
|
||||
procedure ChangeContrast(SrcBmp: TDLBitmap; ValueChange: integer);
|
||||
procedure SprayPoints(DLBmp: TDLBitmap; X, Y: integer; Radians: integer; PColor: TColor);
|
||||
function GetRColor(const Color: TColor): Byte;
|
||||
function GetGColor(const Color: TColor): Byte;
|
||||
function GetBColor(const Color: TColor): Byte;
|
||||
|
||||
implementation
|
||||
|
||||
@ -364,10 +369,15 @@ begin
|
||||
tmp.Free;
|
||||
end;
|
||||
|
||||
procedure TDLBitmap.FloodFill (x, y:integer);
|
||||
procedure TDLBitmap.FloodFill(x, y: integer);
|
||||
begin
|
||||
Canvas.Brush.Color := FFillColor;
|
||||
Canvas.FloodFill(x, y, Canvas.Pixels[x,y], fsSurface);
|
||||
Canvas.FloodFill(x, y, Canvas.Pixels[x, y], fsSurface);
|
||||
end;
|
||||
|
||||
procedure TDLBitmap.Spray(x, y, radian: integer; PColor: TColor);
|
||||
begin
|
||||
SprayPoints(Self, x, y, radian, PColor);
|
||||
end;
|
||||
|
||||
procedure TDLBitmap.FillEllipse(X1, Y1, X2, Y2: integer);
|
||||
|
@ -487,4 +487,76 @@ begin
|
||||
DestBmp.Free;
|
||||
end;
|
||||
|
||||
procedure SetCanvasPixel(DLBmp: TDLBitmap; x, y: integer; aColor: TColor);
|
||||
var SrcRow: pRGBATriple;
|
||||
begin
|
||||
if (x > 0) and (x < DLBmp.Width) and (y > 0) and (y < DLBmp.Height) then
|
||||
//aCanvas.Pixels[x, y] := aColor;
|
||||
begin
|
||||
SrcRow := DLBmp.ScanLine[y];
|
||||
SrcRow[x].rgbtRed:=GetRColor(aColor);
|
||||
SrcRow[x].rgbtGreen:=GetGColor(aColor);
|
||||
SrcRow[x].rgbtBlue:=GetBColor(aColor);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure SprayPoints(DLBmp: TDLBitmap; X, Y: integer; Radians: Integer; PColor: TColor);
|
||||
var
|
||||
i, a, b, temp, ci, center: Integer;
|
||||
begin
|
||||
if DLBmp = nil then
|
||||
Exit;
|
||||
Randomize;
|
||||
for i := 0 to Radians do
|
||||
begin
|
||||
temp := Random(100);
|
||||
a := Random(Round(Radians * 0.65));
|
||||
if (temp < 50) then a := 0 - a;
|
||||
temp := Random(100);
|
||||
b := Random(Round(Radians * 0.65));
|
||||
if (temp < 50) then b := 0 - b;
|
||||
if (a * a + b * b < Sqr(Round(Radians * 0.65))) then
|
||||
SetCanvasPixel(DLBmp, X + a, Y + b, PColor);
|
||||
end;
|
||||
for i := 0 to Radians div 3 do
|
||||
begin
|
||||
temp := Random(100);
|
||||
a := Random(Round(Radians * 0.65));
|
||||
if (temp < 50) then a := 0 - a;
|
||||
temp := Random(100);
|
||||
b := Random(Round(Radians * 0.65));
|
||||
if (temp < 50) then b := 0 - b;
|
||||
if (a * a + b * b < Sqr(Round(Radians * 0.65))) then
|
||||
SetCanvasPixel(DLBmp, X + a, Y + b, PColor);
|
||||
end;
|
||||
for i := 0 to Radians * 2 div 3 do
|
||||
begin
|
||||
temp := Random(100);
|
||||
a := Random(Round(Radians * 0.65));
|
||||
if (temp < 50) then a := 0 - a;
|
||||
temp := Random(100);
|
||||
b := Random(Round(Radians * 0.65));
|
||||
if (temp < 50) then b := 0 - b;
|
||||
if (a * a + b * b < Sqr(Round(Radians * 0.65))) then
|
||||
SetCanvasPixel(DLBmp, X + a, Y + b, PColor);
|
||||
end;
|
||||
DLBmp.InvalidateScanLine;
|
||||
end;
|
||||
|
||||
function GetRColor(const Color: TColor): Byte;
|
||||
begin
|
||||
Result := Color and $FF;
|
||||
end;
|
||||
|
||||
function GetGColor(const Color: TColor): Byte;
|
||||
begin
|
||||
Result := (Color and $FF00) shr 8;
|
||||
end;
|
||||
|
||||
function GetBColor(const Color: TColor): Byte;
|
||||
begin
|
||||
Result := (Color and $FF0000) shr 16;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
|
@ -41,7 +41,7 @@
|
||||
<PackageName Value="LCL"/>
|
||||
</Item3>
|
||||
</RequiredPackages>
|
||||
<Units Count="39">
|
||||
<Units Count="41">
|
||||
<Unit0>
|
||||
<Filename Value="lazimageeditor.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
@ -50,7 +50,7 @@
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="1"/>
|
||||
<CursorPos X="14" Y="4"/>
|
||||
<UsageCount Value="65"/>
|
||||
<UsageCount Value="68"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
@ -62,20 +62,21 @@
|
||||
<UnitName Value="Main"/>
|
||||
<EditorIndex Value="0"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="534"/>
|
||||
<CursorPos X="49" Y="551"/>
|
||||
<UsageCount Value="65"/>
|
||||
<TopLine Value="224"/>
|
||||
<CursorPos X="29" Y="251"/>
|
||||
<UsageCount Value="68"/>
|
||||
<Loaded Value="True"/>
|
||||
<LoadedDesigner Value="True"/>
|
||||
</Unit1>
|
||||
<Unit2>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<UnitName Value="PictureCtrls"/>
|
||||
<EditorIndex Value="4"/>
|
||||
<IsVisibleTab Value="True"/>
|
||||
<EditorIndex Value="5"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="755"/>
|
||||
<CursorPos X="23" Y="758"/>
|
||||
<UsageCount Value="29"/>
|
||||
<TopLine Value="1031"/>
|
||||
<CursorPos X="39" Y="1047"/>
|
||||
<UsageCount Value="30"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit2>
|
||||
<Unit3>
|
||||
@ -182,7 +183,7 @@
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="1"/>
|
||||
<CursorPos X="100" Y="4"/>
|
||||
<UsageCount Value="30"/>
|
||||
<UsageCount Value="31"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit13>
|
||||
<Unit14>
|
||||
@ -244,12 +245,10 @@
|
||||
<Unit21>
|
||||
<Filename Value="bmprgbtypes.pas"/>
|
||||
<UnitName Value="BmpRGBTypes"/>
|
||||
<EditorIndex Value="5"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="1"/>
|
||||
<CursorPos X="98" Y="4"/>
|
||||
<UsageCount Value="27"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit21>
|
||||
<Unit22>
|
||||
<Filename Value="T:\fpclaz\laz\lcl\include\winapih.inc"/>
|
||||
@ -359,12 +358,11 @@
|
||||
<Unit35>
|
||||
<Filename Value="DLBitmap.pas"/>
|
||||
<UnitName Value="DLBitmap"/>
|
||||
<IsVisibleTab Value="True"/>
|
||||
<EditorIndex Value="3"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="346"/>
|
||||
<CursorPos X="1" Y="371"/>
|
||||
<UsageCount Value="12"/>
|
||||
<TopLine Value="351"/>
|
||||
<CursorPos X="19" Y="380"/>
|
||||
<UsageCount Value="13"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit35>
|
||||
<Unit36>
|
||||
@ -391,127 +389,144 @@
|
||||
<CursorPos X="29" Y="64"/>
|
||||
<UsageCount Value="10"/>
|
||||
</Unit38>
|
||||
<Unit39>
|
||||
<Filename Value="DLBmpUtils.inc"/>
|
||||
<EditorIndex Value="4"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="509"/>
|
||||
<CursorPos X="28" Y="543"/>
|
||||
<UsageCount Value="11"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit39>
|
||||
<Unit40>
|
||||
<Filename Value="T:\fpclaz\laz\ide\main.pp"/>
|
||||
<UnitName Value="Main"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="1"/>
|
||||
<CursorPos X="91" Y="1811"/>
|
||||
<UsageCount Value="10"/>
|
||||
</Unit40>
|
||||
</Units>
|
||||
<JumpHistory Count="30" HistoryIndex="29">
|
||||
<Position1>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="597" Column="55" TopLine="575"/>
|
||||
<Caret Line="683" Column="54" TopLine="667"/>
|
||||
</Position1>
|
||||
<Position2>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="596" Column="21" TopLine="586"/>
|
||||
<Caret Line="1015" Column="36" TopLine="994"/>
|
||||
</Position2>
|
||||
<Position3>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="166" Column="24" TopLine="150"/>
|
||||
<Caret Line="1038" Column="20" TopLine="1022"/>
|
||||
</Position3>
|
||||
<Position4>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="167" Column="28" TopLine="150"/>
|
||||
<Filename Value="DLBitmap.pas"/>
|
||||
<Caret Line="375" Column="24" TopLine="354"/>
|
||||
</Position4>
|
||||
<Position5>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="213" Column="82" TopLine="186"/>
|
||||
<Filename Value="DLBmpUtils.inc"/>
|
||||
<Caret Line="490" Column="41" TopLine="480"/>
|
||||
</Position5>
|
||||
<Position6>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="596" Column="25" TopLine="569"/>
|
||||
<Filename Value="DLBmpUtils.inc"/>
|
||||
<Caret Line="507" Column="29" TopLine="497"/>
|
||||
</Position6>
|
||||
<Position7>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="597" Column="55" TopLine="570"/>
|
||||
<Filename Value="DLBitmap.pas"/>
|
||||
<Caret Line="87" Column="54" TopLine="65"/>
|
||||
</Position7>
|
||||
<Position8>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="641" Column="37" TopLine="614"/>
|
||||
<Filename Value="DLBitmap.pas"/>
|
||||
<Caret Line="375" Column="24" TopLine="347"/>
|
||||
</Position8>
|
||||
<Position9>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="658" Column="18" TopLine="631"/>
|
||||
<Filename Value="DLBmpUtils.inc"/>
|
||||
<Caret Line="497" Column="22" TopLine="487"/>
|
||||
</Position9>
|
||||
<Position10>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="703" Column="12" TopLine="676"/>
|
||||
<Filename Value="DLBmpUtils.inc"/>
|
||||
<Caret Line="499" Column="41" TopLine="478"/>
|
||||
</Position10>
|
||||
<Position11>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="766" Column="13" TopLine="748"/>
|
||||
<Filename Value="DLBitmap.pas"/>
|
||||
<Caret Line="91" Column="1" TopLine="65"/>
|
||||
</Position11>
|
||||
<Position12>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="771" Column="54" TopLine="756"/>
|
||||
<Caret Line="8" Column="97" TopLine="3"/>
|
||||
</Position12>
|
||||
<Position13>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="774" Column="43" TopLine="756"/>
|
||||
<Caret Line="111" Column="32" TopLine="79"/>
|
||||
</Position13>
|
||||
<Position14>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="784" Column="26" TopLine="757"/>
|
||||
<Caret Line="114" Column="54" TopLine="85"/>
|
||||
</Position14>
|
||||
<Position15>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="5" Column="95" TopLine="1"/>
|
||||
<Caret Line="178" Column="22" TopLine="146"/>
|
||||
</Position15>
|
||||
<Position16>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="111" Column="62" TopLine="84"/>
|
||||
<Caret Line="668" Column="55" TopLine="822"/>
|
||||
</Position16>
|
||||
<Position17>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="117" Column="51" TopLine="90"/>
|
||||
<Caret Line="680" Column="14" TopLine="661"/>
|
||||
</Position17>
|
||||
<Position18>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="127" Column="15" TopLine="100"/>
|
||||
<Caret Line="684" Column="21" TopLine="661"/>
|
||||
</Position18>
|
||||
<Position19>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="166" Column="24" TopLine="139"/>
|
||||
<Caret Line="699" Column="35" TopLine="682"/>
|
||||
</Position19>
|
||||
<Position20>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="167" Column="28" TopLine="140"/>
|
||||
<Caret Line="737" Column="27" TopLine="708"/>
|
||||
</Position20>
|
||||
<Position21>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="213" Column="82" TopLine="186"/>
|
||||
<Caret Line="738" Column="12" TopLine="708"/>
|
||||
</Position21>
|
||||
<Position22>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="596" Column="20" TopLine="581"/>
|
||||
<Caret Line="3" Column="103" TopLine="1"/>
|
||||
</Position22>
|
||||
<Position23>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="166" Column="24" TopLine="150"/>
|
||||
<Caret Line="111" Column="32" TopLine="79"/>
|
||||
</Position23>
|
||||
<Position24>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="167" Column="28" TopLine="150"/>
|
||||
<Caret Line="114" Column="54" TopLine="82"/>
|
||||
</Position24>
|
||||
<Position25>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="213" Column="82" TopLine="186"/>
|
||||
<Caret Line="178" Column="22" TopLine="146"/>
|
||||
</Position25>
|
||||
<Position26>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="596" Column="20" TopLine="570"/>
|
||||
<Caret Line="690" Column="12" TopLine="657"/>
|
||||
</Position26>
|
||||
<Position27>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="166" Column="22" TopLine="150"/>
|
||||
<Caret Line="689" Column="30" TopLine="665"/>
|
||||
</Position27>
|
||||
<Position28>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="162" Column="49" TopLine="147"/>
|
||||
<Caret Line="684" Column="40" TopLine="665"/>
|
||||
</Position28>
|
||||
<Position29>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="517" Column="36" TopLine="511"/>
|
||||
<Caret Line="686" Column="20" TopLine="667"/>
|
||||
</Position29>
|
||||
<Position30>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="173" Column="59" TopLine="151"/>
|
||||
<Caret Line="1049" Column="31" TopLine="1029"/>
|
||||
</Position30>
|
||||
</JumpHistory>
|
||||
</ProjectOptions>
|
||||
|
@ -1,7 +1,7 @@
|
||||
object MainForm: TMainForm
|
||||
Left = 260
|
||||
Left = 135
|
||||
Height = 681
|
||||
Top = 147
|
||||
Top = 90
|
||||
Width = 935
|
||||
Caption = 'Lazarus Image Editor'
|
||||
ClientHeight = 659
|
||||
@ -151,6 +151,13 @@
|
||||
ShowHint = True
|
||||
Style = tbsCheck
|
||||
end
|
||||
object ToolBrush: TToolButton
|
||||
Left = 0
|
||||
Top = 402
|
||||
Caption = 'ToolBrush'
|
||||
ImageIndex = 5
|
||||
OnClick = ToolBrushClick
|
||||
end
|
||||
end
|
||||
end
|
||||
object StatusBar: TStatusBar
|
||||
@ -1262,8 +1269,8 @@
|
||||
object spinFillAlpha: TSpinEdit
|
||||
Left = 10
|
||||
Height = 27
|
||||
Top = 5
|
||||
Width = 51
|
||||
Top = 3
|
||||
Width = 53
|
||||
OnChange = spinFillAlphaChange
|
||||
TabOrder = 0
|
||||
Value = 100
|
||||
@ -1292,9 +1299,9 @@
|
||||
TabOrder = 5
|
||||
object checkFuzzy: TCheckBox
|
||||
Left = 4
|
||||
Height = 19
|
||||
Height = 23
|
||||
Top = 9
|
||||
Width = 20
|
||||
Width = 24
|
||||
OnChange = checkFuzzyChange
|
||||
TabOrder = 0
|
||||
end
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -163,6 +163,7 @@ type
|
||||
PanelTools: TPanel;
|
||||
ExportResourceDialog: TSaveDialog;
|
||||
SavePictureDialog: TSavePictureDialog;
|
||||
ToolBrush: TToolButton;
|
||||
ZoomInBtn: TToolButton;
|
||||
ZoomOutBtn: TToolButton;
|
||||
ToolCircleShape: TSpeedButton;
|
||||
@ -257,6 +258,7 @@ type
|
||||
procedure Rotate270Execute(Sender: TObject);
|
||||
procedure Rotate90Execute(Sender: TObject);
|
||||
procedure spinFillAlphaChange(Sender: TObject);
|
||||
procedure ToolBrushClick(Sender: TObject);
|
||||
procedure ZoomInBtnClick(Sender: TObject);
|
||||
procedure ZoomOutBtnClick(Sender: TObject);
|
||||
procedure ToolCircleShapeClick(Sender: TObject);
|
||||
@ -461,6 +463,13 @@ begin
|
||||
ActivePictureEdit.FillAlpha := spinFillAlpha.Value;
|
||||
end;
|
||||
|
||||
procedure TMainForm.ToolBrushClick(Sender: TObject);
|
||||
begin
|
||||
if not Pictures.CanEdit then
|
||||
Exit;
|
||||
ChangeTool(ptBrush);
|
||||
end;
|
||||
|
||||
procedure TMainForm.ZoomInBtnClick(Sender: TObject);
|
||||
var
|
||||
V, E: integer;
|
||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user