Spray is as fast as MS Paint now.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1604 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
yangjixian
2011-05-02 01:35:50 +00:00
parent 5f3af03804
commit 12728fe465
5 changed files with 116 additions and 103 deletions

View File

@ -47,6 +47,7 @@ type
destructor Destroy; override;
procedure ResetScanLine;
procedure InvalidateScanLine;
procedure InvalidateScanLineRect(aRect: TRect);
procedure Assign(Source: TPersistent); override;
procedure Clear; virtual;
procedure ClearWhite; virtual;
@ -174,6 +175,22 @@ begin
TmpBmp.Free;
end;
procedure TDLBitmap.InvalidateScanLineRect(aRect: TRect);
var
TmpBmp: TDLBitmap;
ImgHandle, ImgMaskHandle: HBitmap;
begin
TmpBmp := TDLBitmap.Create;
FIntfImgA.CreateBitmaps(ImgHandle, ImgMaskHandle, True);
TmpBmp.Handle := ImgHandle;
TmpBmp.MaskHandle := ImgMaskHandle;
Empty;
Width := TmpBmp.Width;
Height := TmpBmp.Height;
Canvas.CopyRect(aRect, TmpBmp.Canvas, aRect);
TmpBmp.Free;
end;
procedure TDLBitmap.CutToClipboard;
begin
CopyToClipboard;
@ -418,7 +435,7 @@ end;
procedure TDLBitmap.Spray(x, y, radian: integer; PColor: TColor);
begin
SprayPoints(Self.Canvas, x, y, radian, PColor);
SprayPoints(Self, x, y, radian, PColor);
end;
procedure TDLBitmap.FillEllipse(X1, Y1, X2, Y2: integer);

View File

@ -502,7 +502,7 @@ end;
procedure SprayPoints(DLBmp: TDLBitmap; X, Y: integer; Radians: Integer; PColor: TColor);
var
i, a, b, temp, ci, center: Integer;
i, a, b, temp, ci, center, Radian2, Radian3: Integer;
begin
if DLBmp = nil then
Exit;
@ -517,30 +517,26 @@ begin
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
Radian2 := Radians div 3;
temp := Random(100);
a := Random(Round(Radians * 0.65));
a := Random(Round(Radian2 * 0.65));
if (temp < 50) then a := 0 - a;
temp := Random(100);
b := Random(Round(Radians * 0.65));
b := Random(Round(Radian2 * 0.65));
if (temp < 50) then b := 0 - b;
if (a * a + b * b < Sqr(Round(Radians * 0.65))) then
if (a * a + b * b < Sqr(Round(Radian2 * 0.65))) then
SetCanvasPixel(DLBmp, X + a, Y + b, PColor);
end;
for i := 0 to Radians * 2 div 3 do
begin
Radian3 := Radians * 2 div 3;
temp := Random(100);
a := Random(Round(Radians * 0.65));
a := Random(Round(Radian3 * 0.65));
if (temp < 50) then a := 0 - a;
temp := Random(100);
b := Random(Round(Radians * 0.65));
b := Random(Round(Radian3 * 0.65));
if (temp < 50) then b := 0 - b;
if (a * a + b * b < Sqr(Round(Radians * 0.65))) then
if (a * a + b * b < Sqr(Round(Radian3 * 0.65))) then
SetCanvasPixel(DLBmp, X + a, Y + b, PColor);
end;
DLBmp.InvalidateScanLine;
DLBmp.InvalidateScanLineRect(Rect(X - Radians, Y - Radians, X + Radians, Y + Radians));
end;
function GetRColor(const Color: TColor): Byte;

View File

@ -60,8 +60,8 @@
<UnitName Value="Main"/>
<EditorIndex Value="0"/>
<WindowIndex Value="0"/>
<TopLine Value="1096"/>
<CursorPos X="25" Y="1112"/>
<TopLine Value="801"/>
<CursorPos X="34" Y="812"/>
<UsageCount Value="74"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
@ -355,11 +355,10 @@
<Unit35>
<Filename Value="DLBitmap.pas"/>
<UnitName Value="DLBitmap"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="3"/>
<WindowIndex Value="0"/>
<TopLine Value="110"/>
<CursorPos X="1" Y="131"/>
<TopLine Value="432"/>
<CursorPos X="19" Y="438"/>
<UsageCount Value="15"/>
<Loaded Value="True"/>
</Unit35>
@ -389,10 +388,11 @@
</Unit38>
<Unit39>
<Filename Value="DLBmpUtils.inc"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="4"/>
<WindowIndex Value="0"/>
<TopLine Value="593"/>
<CursorPos X="50" Y="611"/>
<TopLine Value="488"/>
<CursorPos X="2" Y="504"/>
<UsageCount Value="13"/>
<Loaded Value="True"/>
</Unit39>
@ -408,123 +408,123 @@
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="main.pas"/>
<Caret Line="1208" Column="28" TopLine="1194"/>
<Caret Line="177" Column="20" TopLine="145"/>
</Position1>
<Position2>
<Filename Value="main.pas"/>
<Caret Line="6" Column="87" TopLine="1"/>
<Caret Line="183" Column="16" TopLine="151"/>
</Position2>
<Position3>
<Filename Value="main.pas"/>
<Caret Line="100" Column="21" TopLine="68"/>
<Caret Line="257" Column="27" TopLine="225"/>
</Position3>
<Position4>
<Filename Value="main.pas"/>
<Caret Line="113" Column="17" TopLine="81"/>
<Caret Line="1197" Column="72" TopLine="10"/>
</Position4>
<Position5>
<Filename Value="main.pas"/>
<Caret Line="133" Column="17" TopLine="101"/>
<Caret Line="1198" Column="72" TopLine="1167"/>
</Position5>
<Position6>
<Filename Value="main.pas"/>
<Caret Line="137" Column="21" TopLine="105"/>
<Caret Line="1199" Column="72" TopLine="1168"/>
</Position6>
<Position7>
<Filename Value="main.pas"/>
<Caret Line="177" Column="20" TopLine="145"/>
<Caret Line="1198" Column="72" TopLine="1167"/>
</Position7>
<Position8>
<Filename Value="main.pas"/>
<Caret Line="183" Column="16" TopLine="151"/>
<Caret Line="1199" Column="72" TopLine="1168"/>
</Position8>
<Position9>
<Filename Value="main.pas"/>
<Caret Line="257" Column="27" TopLine="225"/>
<Caret Line="1201" Column="72" TopLine="1170"/>
</Position9>
<Position10>
<Filename Value="main.pas"/>
<Caret Line="1197" Column="72" TopLine="10"/>
<Caret Line="1337" Column="3" TopLine="1329"/>
</Position10>
<Position11>
<Filename Value="main.pas"/>
<Caret Line="1198" Column="72" TopLine="1167"/>
<Caret Line="1344" Column="3" TopLine="1336"/>
</Position11>
<Position12>
<Filename Value="main.pas"/>
<Caret Line="1199" Column="72" TopLine="1168"/>
<Caret Line="1105" Column="26" TopLine="1096"/>
</Position12>
<Position13>
<Filename Value="main.pas"/>
<Caret Line="1198" Column="72" TopLine="1167"/>
</Position13>
<Position14>
<Filename Value="main.pas"/>
<Caret Line="1199" Column="72" TopLine="1168"/>
</Position14>
<Position15>
<Filename Value="main.pas"/>
<Caret Line="1201" Column="72" TopLine="1170"/>
</Position15>
<Position16>
<Filename Value="main.pas"/>
<Caret Line="1337" Column="3" TopLine="1329"/>
</Position16>
<Position17>
<Filename Value="main.pas"/>
<Caret Line="1344" Column="3" TopLine="1336"/>
</Position17>
<Position18>
<Filename Value="main.pas"/>
<Caret Line="1105" Column="26" TopLine="1096"/>
</Position18>
<Position19>
<Filename Value="picturectrls.pas"/>
<Caret Line="193" Column="57" TopLine="181"/>
</Position19>
<Position20>
</Position13>
<Position14>
<Filename Value="DLBitmap.pas"/>
<Caret Line="510" Column="30" TopLine="506"/>
</Position20>
<Position21>
</Position14>
<Position15>
<Filename Value="picturectrls.pas"/>
<Caret Line="1176" Column="33" TopLine="1159"/>
</Position21>
<Position22>
</Position15>
<Position16>
<Filename Value="DLBitmap.pas"/>
<Caret Line="428" Column="28" TopLine="409"/>
</Position22>
<Position23>
</Position16>
<Position17>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="4" Column="96" TopLine="1"/>
</Position23>
<Position24>
</Position17>
<Position18>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="601" Column="1" TopLine="588"/>
</Position24>
<Position25>
</Position18>
<Position19>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="13" Column="89" TopLine="5"/>
</Position25>
<Position26>
</Position19>
<Position20>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="615" Column="45" TopLine="591"/>
</Position26>
<Position27>
</Position20>
<Position21>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="616" Column="59" TopLine="593"/>
</Position21>
<Position22>
<Filename Value="main.pas"/>
<Caret Line="1106" Column="31" TopLine="1096"/>
</Position22>
<Position23>
<Filename Value="main.pas"/>
<Caret Line="1112" Column="25" TopLine="1096"/>
</Position23>
<Position24>
<Filename Value="picturectrls.pas"/>
<Caret Line="188" Column="27" TopLine="172"/>
</Position24>
<Position25>
<Filename Value="DLBitmap.pas"/>
<Caret Line="49" Column="33" TopLine="42"/>
</Position25>
<Position26>
<Filename Value="DLBitmap.pas"/>
<Caret Line="50" Column="33" TopLine="42"/>
</Position26>
<Position27>
<Filename Value="DLBitmap.pas"/>
<Caret Line="190" Column="37" TopLine="170"/>
</Position27>
<Position28>
<Filename Value="main.pas"/>
<Caret Line="1106" Column="31" TopLine="1096"/>
<Caret Line="1135" Column="52" TopLine="1123"/>
</Position28>
<Position29>
<Filename Value="main.pas"/>
<Caret Line="1112" Column="25" TopLine="1096"/>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="503" Column="15" TopLine="491"/>
</Position29>
<Position30>
<Filename Value="picturectrls.pas"/>
<Caret Line="188" Column="27" TopLine="172"/>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="581" Column="96" TopLine="571"/>
</Position30>
</JumpHistory>
</ProjectOptions>

View File

@ -1,10 +1,10 @@
object MainForm: TMainForm
Left = 180
Left = 150
Height = 681
Top = 90
Top = 63
Width = 920
Caption = 'Lazarus Image Editor'
ClientHeight = 659
ClientHeight = 661
ClientWidth = 920
Font.CharSet = GB2312_CHARSET
Font.Height = -13
@ -18,18 +18,18 @@
LCLVersion = '0.9.31'
object PanelTools: TPanel
Left = 0
Height = 532
Height = 534
Top = 105
Width = 40
Align = alLeft
BevelOuter = bvNone
ClientHeight = 532
ClientHeight = 534
ClientWidth = 40
ParentColor = False
TabOrder = 0
object ToolBarTools: TToolBar
Left = 0
Height = 532
Height = 534
Top = 0
Width = 40
Align = alLeft
@ -175,7 +175,7 @@
object StatusBar: TStatusBar
Left = 0
Height = 22
Top = 637
Top = 639
Width = 920
Panels = <
item
@ -202,18 +202,18 @@
end
object PanelPallete: TPanel
Left = 845
Height = 532
Height = 534
Top = 105
Width = 75
Align = alRight
AutoSize = True
BevelOuter = bvNone
ClientHeight = 532
ClientHeight = 534
ClientWidth = 75
TabOrder = 1
object Palette: TColorPalette
Left = 0
Height = 532
Height = 534
Top = 0
Width = 75
Align = alClient
@ -1375,9 +1375,9 @@
TabOrder = 5
object checkFuzzy: TCheckBox
Left = 4
Height = 23
Height = 21
Top = 5
Width = 24
Width = 22
OnChange = checkFuzzyChange
TabOrder = 0
end
@ -1386,7 +1386,7 @@
end
object PanelPictures: TPanel
Left = 40
Height = 532
Height = 534
Top = 105
Width = 805
Align = alClient

View File

@ -1,17 +1,17 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TMainForm','FORMDATA',[
'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#3#180#0#6'Height'#3#169#2#3'Top'#2'Z'
'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#3#150#0#6'Height'#3#169#2#3'Top'#2'?'
+#5'Width'#3#152#3#7'Caption'#6#20'Lazarus Image Editor'#12'ClientHeight'#3
+#147#2#11'ClientWidth'#3#152#3#12'Font.CharSet'#7#14'GB2312_CHARSET'#11'Font'
+#149#2#11'ClientWidth'#3#152#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
+#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'
+'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#20#2#3'Top'#2'i'#5'Width'#2'('#5'Align'#7#6
+'alLeft'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#3#20#2#11'ClientWidth'#2
+'Tools'#4'Left'#2#0#6'Height'#3#22#2#3'Top'#2'i'#5'Width'#2'('#5'Align'#7#6
+'alLeft'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#3#22#2#11'ClientWidth'#2
+'('#11'ParentColor'#8#8'TabOrder'#2#0#0#8'TToolBar'#12'ToolBarTools'#4'Left'
+#2#0#6'Height'#3#20#2#3'Top'#2#0#5'Width'#2'('#5'Align'#7#6'alLeft'#12'Butto'
+#2#0#6'Height'#3#22#2#3'Top'#2#0#5'Width'#2'('#5'Align'#7#6'alLeft'#12'Butto'
+'nHeight'#2'('#11'ButtonWidth'#2'('#7'Caption'#6#12'ToolBarTools'#21'Constra'
+'ints.MinHeight'#3#146#1#6'Images'#7#14'ImageListTools'#6'Indent'#2#0#8'TabO'
+'rder'#2#0#7'OnClick'#7#17'ToolBarToolsClick'#0#11'TToolButton'#9'ToolSpray'
@ -47,13 +47,13 @@ LazarusResources.Add('TMainForm','FORMDATA',[
+'oolBrushClick'#0#0#11'TToolButton'#8'ToolText'#4'Left'#2#0#4'Hint'#6#4'Text'
+#3'Top'#3#186#1#7'Caption'#6#9'ToolBrush'#7'Grouped'#9#10'ImageIndex'#2#5#7
+'OnClick'#7#13'ToolTextClick'#0#0#0#0#10'TStatusBar'#9'StatusBar'#4'Left'#2#0
+#6'Height'#2#22#3'Top'#3'}'#2#5'Width'#3#152#3#6'Panels'#14#1#5'Width'#3#250
+#6'Height'#2#22#3'Top'#3#127#2#5'Width'#3#152#3#6'Panels'#14#1#5'Width'#3#250
+#0#0#1#9'Alignment'#7#8'taCenter'#5'Width'#2'P'#0#1#9'Alignment'#7#8'taCente'
+'r'#5'Width'#2'P'#0#1#5'Width'#2'P'#0#1#5'Width'#2'P'#0#1#5'Width'#2'2'#0#0
+#11'SimplePanel'#8#0#0#6'TPanel'#12'PanelPallete'#4'Left'#3'M'#3#6'Height'#3
+#20#2#3'Top'#2'i'#5'Width'#2'K'#5'Align'#7#7'alRight'#8'AutoSize'#9#10'Bevel'
+'Outer'#7#6'bvNone'#12'ClientHeight'#3#20#2#11'ClientWidth'#2'K'#8'TabOrder'
+#2#1#0#13'TColorPalette'#7'Palette'#4'Left'#2#0#6'Height'#3#20#2#3'Top'#2#0#5
+#22#2#3'Top'#2'i'#5'Width'#2'K'#5'Align'#7#7'alRight'#8'AutoSize'#9#10'Bevel'
+'Outer'#7#6'bvNone'#12'ClientHeight'#3#22#2#11'ClientWidth'#2'K'#8'TabOrder'
+#2#1#0#13'TColorPalette'#7'Palette'#4'Left'#2#0#6'Height'#3#22#2#3'Top'#2#0#5
+'Width'#2'K'#5'Align'#7#8'alClient'#11'ButtonWidth'#2#12#12'ButtonHeight'#2
+#12#8'DragMode'#7#11'dmAutomatic'#16'OnColorMouseMove'#7#21'PaletteColorMous'
+'eMove'#11'OnColorPick'#7#16'PaletteColorPick'#0#0#0#6'TPanel'#12'PanelToolB'
@ -753,9 +753,9 @@ LazarusResources.Add('TMainForm','FORMDATA',[
+'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'
+#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#5#5'Width'#2#24#8'OnChange'
+'checkFuzzy'#4'Left'#2#4#6'Height'#2#21#3'Top'#2#5#5'Width'#2#22#8'OnChange'
+#7#16'checkFuzzyChange'#8'TabOrder'#2#0#0#0#0#0#0#6'TPanel'#13'PanelPictures'
+#4'Left'#2'('#6'Height'#3#20#2#3'Top'#2'i'#5'Width'#3'%'#3#5'Align'#7#8'alCl'
+#4'Left'#2'('#6'Height'#3#22#2#3'Top'#2'i'#5'Width'#3'%'#3#5'Align'#7#8'alCl'
+'ient'#10'BevelOuter'#7#9'bvLowered'#8'TabOrder'#2#3#0#0#9'TMainMenu'#8'Main'
+'Menu'#6'Images'#7#16'ImageListActions'#4'left'#2'r'#3'top'#2'~'#0#9'TMenuIt'
+'em'#12'MenuItemFile'#7'Caption'#6#5'&File'#0#9'TMenuItem'#11'MenuItemNew'#7