FloodFill works.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1588 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
yangjixian
2011-04-21 02:04:35 +00:00
parent c84f1319f7
commit bc0375d331
4 changed files with 95 additions and 81 deletions

View File

@ -65,6 +65,7 @@ type
procedure CopyToClipboard; virtual; procedure CopyToClipboard; virtual;
procedure PasteFromClipboard; virtual; procedure PasteFromClipboard; virtual;
procedure Delete; virtual; procedure Delete; virtual;
procedure FloodFill (x,y:integer);
property FillColor: TColor read GetFillColor write SetFillColor; property FillColor: TColor read GetFillColor write SetFillColor;
property OutlineColor: TColor read GetOutlineColor write SetOutlineColor; property OutlineColor: TColor read GetOutlineColor write SetOutlineColor;
property PaperColor: TColor read GetPaperColor write SetPaperColor; property PaperColor: TColor read GetPaperColor write SetPaperColor;
@ -363,6 +364,12 @@ begin
tmp.Free; tmp.Free;
end; end;
procedure TDLBitmap.FloodFill (x, y:integer);
begin
Canvas.Brush.Color := FFillColor;
Canvas.FloodFill(x, y, Canvas.Pixels[x,y], fsSurface);
end;
procedure TDLBitmap.FillEllipse(X1, Y1, X2, Y2: integer); procedure TDLBitmap.FillEllipse(X1, Y1, X2, Y2: integer);
begin begin

View File

@ -527,7 +527,8 @@ end;
procedure TRGBBitmapCore.MaskFloodFill(X, Y: integer); procedure TRGBBitmapCore.MaskFloodFill(X, Y: integer);
begin begin
Canvas.Brush.Color := clBlack; Canvas.Brush.Color := clBlack;
Canvas.FillRect(Rect(0, 0, Width, Height)); // Canvas.FillRect(Rect(0, 0, Width, Height));
FloodFill(X, Y);
end; end;
// AAlpha is the alpha of the rectangle, ranging from // AAlpha is the alpha of the rectangle, ranging from

View File

@ -41,7 +41,7 @@
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
</Item3> </Item3>
</RequiredPackages> </RequiredPackages>
<Units Count="38"> <Units Count="39">
<Unit0> <Unit0>
<Filename Value="lazimageeditor.pas"/> <Filename Value="lazimageeditor.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -50,7 +50,7 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<CursorPos X="14" Y="4"/> <CursorPos X="14" Y="4"/>
<UsageCount Value="64"/> <UsageCount Value="65"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
@ -62,21 +62,20 @@
<UnitName Value="Main"/> <UnitName Value="Main"/>
<EditorIndex Value="0"/> <EditorIndex Value="0"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1203"/> <TopLine Value="534"/>
<CursorPos X="30" Y="1220"/> <CursorPos X="49" Y="551"/>
<UsageCount Value="64"/> <UsageCount Value="65"/>
<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"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="4"/> <EditorIndex Value="4"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="117"/> <TopLine Value="755"/>
<CursorPos X="24" Y="137"/> <CursorPos X="23" Y="758"/>
<UsageCount Value="28"/> <UsageCount Value="29"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit2> </Unit2>
<Unit3> <Unit3>
@ -172,8 +171,8 @@
<Filename Value="T:\fpclaz\laz\lcl\graphics.pp"/> <Filename Value="T:\fpclaz\laz\lcl\graphics.pp"/>
<UnitName Value="Graphics"/> <UnitName Value="Graphics"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="2580"/> <TopLine Value="1086"/>
<CursorPos X="9" Y="2592"/> <CursorPos X="15" Y="1102"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit12> </Unit12>
<Unit13> <Unit13>
@ -183,7 +182,7 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<CursorPos X="100" Y="4"/> <CursorPos X="100" Y="4"/>
<UsageCount Value="29"/> <UsageCount Value="30"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit13> </Unit13>
<Unit14> <Unit14>
@ -245,19 +244,19 @@
<Unit21> <Unit21>
<Filename Value="bmprgbtypes.pas"/> <Filename Value="bmprgbtypes.pas"/>
<UnitName Value="BmpRGBTypes"/> <UnitName Value="BmpRGBTypes"/>
<EditorIndex Value="6"/> <EditorIndex Value="5"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="539"/> <TopLine Value="1"/>
<CursorPos X="40" Y="535"/> <CursorPos X="98" Y="4"/>
<UsageCount Value="26"/> <UsageCount Value="27"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit21> </Unit21>
<Unit22> <Unit22>
<Filename Value="T:\fpclaz\laz\lcl\include\winapih.inc"/> <Filename Value="T:\fpclaz\laz\lcl\include\winapih.inc"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="255"/> <TopLine Value="93"/>
<CursorPos X="23" Y="271"/> <CursorPos X="10" Y="109"/>
<UsageCount Value="9"/> <UsageCount Value="10"/>
</Unit22> </Unit22>
<Unit23> <Unit23>
<Filename Value="T:\fpclaz\laz\lcl\lcltype.pp"/> <Filename Value="T:\fpclaz\laz\lcl\lcltype.pp"/>
@ -278,38 +277,34 @@
<Unit25> <Unit25>
<Filename Value="bmprgbutils.pas"/> <Filename Value="bmprgbutils.pas"/>
<UnitName Value="BmpRGBUtils"/> <UnitName Value="BmpRGBUtils"/>
<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"/>
<UsageCount Value="24"/> <UsageCount Value="24"/>
<Loaded Value="True"/>
</Unit25> </Unit25>
<Unit26> <Unit26>
<Filename Value="T:\fpclaz\fpc\2.5\packages\fcl-image\src\fpcanvas.pp"/> <Filename Value="T:\fpclaz\fpc\2.5\packages\fcl-image\src\fpcanvas.pp"/>
<UnitName Value="FPCanvas"/> <UnitName Value="FPCanvas"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="267"/> <TopLine Value="286"/>
<CursorPos X="15" Y="283"/> <CursorPos X="5" Y="302"/>
<UsageCount Value="9"/> <UsageCount Value="10"/>
</Unit26> </Unit26>
<Unit27> <Unit27>
<Filename Value="T:\fpclaz\laz\lcl\graphtype.pp"/> <Filename Value="T:\fpclaz\laz\lcl\graphtype.pp"/>
<UnitName Value="GraphType"/> <UnitName Value="GraphType"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="24"/> <TopLine Value="26"/>
<CursorPos X="45" Y="35"/> <CursorPos X="5" Y="42"/>
<UsageCount Value="9"/> <UsageCount Value="10"/>
</Unit27> </Unit27>
<Unit28> <Unit28>
<Filename Value="bmprgbgraph.pas"/> <Filename Value="bmprgbgraph.pas"/>
<UnitName Value="BmpRGBGraph"/> <UnitName Value="BmpRGBGraph"/>
<EditorIndex Value="7"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="500"/> <TopLine Value="500"/>
<CursorPos X="27" Y="532"/> <CursorPos X="27" Y="532"/>
<UsageCount Value="20"/> <UsageCount Value="20"/>
<Loaded Value="True"/>
</Unit28> </Unit28>
<Unit29> <Unit29>
<Filename Value="rgbdrawutils.pas"/> <Filename Value="rgbdrawutils.pas"/>
@ -364,11 +359,12 @@
<Unit35> <Unit35>
<Filename Value="DLBitmap.pas"/> <Filename Value="DLBitmap.pas"/>
<UnitName Value="DLBitmap"/> <UnitName Value="DLBitmap"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="3"/> <EditorIndex Value="3"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="10"/> <TopLine Value="346"/>
<CursorPos X="102" Y="6"/> <CursorPos X="1" Y="371"/>
<UsageCount Value="11"/> <UsageCount Value="12"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit35> </Unit35>
<Unit36> <Unit36>
@ -387,127 +383,135 @@
<CursorPos X="21" Y="68"/> <CursorPos X="21" Y="68"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit37> </Unit37>
<Unit38>
<Filename Value="T:\fpclaz\laz\lcl\controls.pp"/>
<UnitName Value="Controls"/>
<WindowIndex Value="0"/>
<TopLine Value="48"/>
<CursorPos X="29" Y="64"/>
<UsageCount Value="10"/>
</Unit38>
</Units> </Units>
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="30" HistoryIndex="29">
<Position1> <Position1>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="2" Column="101" TopLine="1"/> <Caret Line="597" Column="55" TopLine="575"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="109" Column="54" TopLine="77"/> <Caret Line="596" Column="21" TopLine="586"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="657" Column="41" TopLine="625"/> <Caret Line="166" Column="24" TopLine="150"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="681" Column="25" TopLine="649"/> <Caret Line="167" Column="28" TopLine="150"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="109" Column="54" TopLine="90"/> <Caret Line="213" Column="82" TopLine="186"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="657" Column="41" TopLine="625"/> <Caret Line="596" Column="25" TopLine="569"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="8" Column="78" TopLine="1"/> <Caret Line="597" Column="55" TopLine="570"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="179" Column="22" TopLine="147"/> <Caret Line="641" Column="37" TopLine="614"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="197" Column="18" TopLine="165"/> <Caret Line="658" Column="18" TopLine="631"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="272" Column="32" TopLine="240"/> <Caret Line="703" Column="12" TopLine="676"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="276" Column="28" TopLine="244"/> <Caret Line="766" Column="13" TopLine="748"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="386" Column="37" TopLine="363"/> <Caret Line="771" Column="54" TopLine="756"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="391" Column="42" TopLine="375"/> <Caret Line="774" Column="43" TopLine="756"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="578" Column="38" TopLine="558"/> <Caret Line="784" Column="26" TopLine="757"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="582" Column="44" TopLine="558"/> <Caret Line="5" Column="95" TopLine="1"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="606" Column="34" TopLine="586"/> <Caret Line="111" Column="62" TopLine="84"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="610" Column="25" TopLine="586"/> <Caret Line="117" Column="51" TopLine="90"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="797" Column="29" TopLine="777"/> <Caret Line="127" Column="15" TopLine="100"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="798" Column="16" TopLine="777"/> <Caret Line="166" Column="24" TopLine="139"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="887" Column="16" TopLine="864"/> <Caret Line="167" Column="28" TopLine="140"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1031" Column="16" TopLine="1011"/> <Caret Line="213" Column="82" TopLine="186"/>
</Position21> </Position21>
<Position22> <Position22>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1033" Column="43" TopLine="1011"/> <Caret Line="596" Column="20" TopLine="581"/>
</Position22> </Position22>
<Position23> <Position23>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="681" Column="29" TopLine="649"/> <Caret Line="166" Column="24" TopLine="150"/>
</Position23> </Position23>
<Position24> <Position24>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="171" Column="15" TopLine="152"/> <Caret Line="167" Column="28" TopLine="150"/>
</Position24> </Position24>
<Position25> <Position25>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="916" Column="7" TopLine="897"/> <Caret Line="213" Column="82" TopLine="186"/>
</Position25> </Position25>
<Position26> <Position26>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="879" Column="12" TopLine="857"/> <Caret Line="596" Column="20" TopLine="570"/>
</Position26> </Position26>
<Position27> <Position27>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="874" Column="3" TopLine="861"/> <Caret Line="166" Column="22" TopLine="150"/>
</Position27> </Position27>
<Position28> <Position28>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="878" Column="25" TopLine="861"/> <Caret Line="162" Column="49" TopLine="147"/>
</Position28> </Position28>
<Position29> <Position29>
<Filename Value="bmprgbtypes.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="126" Column="29" TopLine="107"/> <Caret Line="517" Column="36" TopLine="511"/>
</Position29> </Position29>
<Position30> <Position30>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="859" Column="24" TopLine="852"/> <Caret Line="173" Column="59" TopLine="151"/>
</Position30> </Position30>
</JumpHistory> </JumpHistory>
</ProjectOptions> </ProjectOptions>

View File

@ -763,7 +763,9 @@ begin
BeginDraw; BeginDraw;
if not (ssLeft in Shift) then Picture.EraseMode := ermErase; if not (ssLeft in Shift) then Picture.EraseMode := ermErase;
try try
Picture.Canvas.FloodFill(X, Y, FFillColor, fsSurface); //Picture.Canvas.Brush.Color, fsSurface); //Picture.Canvas.FloodFill(X, Y, FFillColor, fsSurface); //Picture.Canvas.Brush.Color, fsSurface);
Picture.Canvas.Brush.Color := FFillColor;
Picture.Canvas.FloodFill(x, y, Picture.Canvas.Pixels[x,y], fsSurface);
finally finally
Picture.EraseMode := ermNone; Picture.EraseMode := ermNone;
EndDraw; EndDraw;