Add direct access to ScanLine's Pixels.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1605 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
yangjixian
2011-05-02 03:34:22 +00:00
parent 12728fe465
commit 19ee0dc43f
3 changed files with 111 additions and 106 deletions

View File

@ -38,6 +38,8 @@ type
procedure SetFillColor(const AValue: TColor); procedure SetFillColor(const AValue: TColor);
procedure SetOutlineColor(const AValue: TColor); procedure SetOutlineColor(const AValue: TColor);
procedure SetPaperColor(const AValue: TColor); procedure SetPaperColor(const AValue: TColor);
function GetScanLinePixel(X, Y: Integer): TColor;
procedure SetScanLinePixel(X, Y: Integer; Value: TColor);
protected protected
procedure SetWidth(Value: integer); override; procedure SetWidth(Value: integer); override;
procedure SetHeight(Value: integer); override; procedure SetHeight(Value: integer); override;
@ -73,6 +75,7 @@ type
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;
property ScanLinePixels[X, Y: Integer]: TColor read GetScanLinePixel write SetScanLinePixel;
end; end;
TTextEditor = class; TTextEditor = class;
@ -433,6 +436,31 @@ begin
Canvas.FloodFill(x, y, Canvas.Pixels[x, y], fsSurface); Canvas.FloodFill(x, y, Canvas.Pixels[x, y], fsSurface);
end; end;
function TDLBitmap.GetScanLinePixel(X, Y: Integer): TColor;
var SrcRow: pRGBATriple; RR, GG, BB: integer;
begin
if (x >= 0) and (x < Width) and (y >= 0) and (y < Height) then
begin
SrcRow := ScanLine[y];
RR := SrcRow[x].rgbtRed;
GG := SrcRow[x].rgbtGreen;
BB := SrcRow[x].rgbtBlue;
end;
Result := RR + (GG shl 8) and $FF00 + (BB shl 16) and $FF0000;
end;
procedure TDLBitmap.SetScanLinePixel(X, Y: Integer; Value: TColor);
var SrcRow: pRGBATriple;
begin
if (x >= 0) and (x < Width) and (y >= 0) and (y < Height) then
begin
SrcRow := ScanLine[y];
SrcRow[x].rgbtRed:=GetRColor(Value);
SrcRow[x].rgbtGreen:=GetGColor(Value);
SrcRow[x].rgbtBlue:=GetBColor(Value);
end;
end;
procedure TDLBitmap.Spray(x, y, radian: integer; PColor: TColor); procedure TDLBitmap.Spray(x, y, radian: integer; PColor: TColor);
begin begin
SprayPoints(Self, x, y, radian, PColor); SprayPoints(Self, x, y, radian, PColor);

View File

@ -487,11 +487,10 @@ begin
DestBmp.Free; DestBmp.Free;
end; end;
procedure SetCanvasPixel(DLBmp: TDLBitmap; x, y: integer; aColor: TColor); procedure SetDLBMPPixel(DLBmp: TDLBitmap; x, y: integer; aColor: TColor);
var SrcRow: pRGBATriple; var SrcRow: pRGBATriple;
begin begin
if (x > 0) and (x < DLBmp.Width) and (y > 0) and (y < DLBmp.Height) then if (x >= 0) and (x < DLBmp.Width) and (y >= 0) and (y < DLBmp.Height) then
//aCanvas.Pixels[x, y] := aColor;
begin begin
SrcRow := DLBmp.ScanLine[y]; SrcRow := DLBmp.ScanLine[y];
SrcRow[x].rgbtRed:=GetRColor(aColor); SrcRow[x].rgbtRed:=GetRColor(aColor);
@ -516,7 +515,7 @@ begin
b := Random(Round(Radians * 0.65)); b := Random(Round(Radians * 0.65));
if (temp < 50) then b := 0 - b; 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(Radians * 0.65))) then
SetCanvasPixel(DLBmp, X + a, Y + b, PColor); DLBmp.ScanLinePixels[X + a, Y + b] := PColor;
Radian2 := Radians div 3; Radian2 := Radians div 3;
temp := Random(100); temp := Random(100);
a := Random(Round(Radian2 * 0.65)); a := Random(Round(Radian2 * 0.65));
@ -525,7 +524,7 @@ begin
b := Random(Round(Radian2 * 0.65)); b := Random(Round(Radian2 * 0.65));
if (temp < 50) then b := 0 - b; if (temp < 50) then b := 0 - b;
if (a * a + b * b < Sqr(Round(Radian2 * 0.65))) then if (a * a + b * b < Sqr(Round(Radian2 * 0.65))) then
SetCanvasPixel(DLBmp, X + a, Y + b, PColor); DLBmp.ScanLinePixels[X + a, Y + b] := PColor;
Radian3 := Radians * 2 div 3; Radian3 := Radians * 2 div 3;
temp := Random(100); temp := Random(100);
a := Random(Round(Radian3 * 0.65)); a := Random(Round(Radian3 * 0.65));
@ -534,7 +533,7 @@ begin
b := Random(Round(Radian3 * 0.65)); b := Random(Round(Radian3 * 0.65));
if (temp < 50) then b := 0 - b; if (temp < 50) then b := 0 - b;
if (a * a + b * b < Sqr(Round(Radian3 * 0.65))) then if (a * a + b * b < Sqr(Round(Radian3 * 0.65))) then
SetCanvasPixel(DLBmp, X + a, Y + b, PColor); DLBmp.ScanLinePixels[X + a, Y + b] := PColor;
end; end;
DLBmp.InvalidateScanLineRect(Rect(X - Radians, Y - Radians, X + Radians, Y + Radians)); DLBmp.InvalidateScanLineRect(Rect(X - Radians, Y - Radians, X + Radians, Y + Radians));
end; end;

View File

@ -41,7 +41,7 @@
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
</Item3> </Item3>
</RequiredPackages> </RequiredPackages>
<Units Count="41"> <Units Count="43">
<Unit0> <Unit0>
<Filename Value="lazimageeditor.pas"/> <Filename Value="lazimageeditor.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -49,7 +49,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="74"/> <UsageCount Value="75"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
@ -62,7 +62,7 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="801"/> <TopLine Value="801"/>
<CursorPos X="34" Y="812"/> <CursorPos X="34" Y="812"/>
<UsageCount Value="74"/> <UsageCount Value="75"/>
<Loaded Value="True"/> <Loaded Value="True"/>
<LoadedDesigner Value="True"/> <LoadedDesigner Value="True"/>
</Unit1> </Unit1>
@ -71,9 +71,9 @@
<UnitName Value="PictureCtrls"/> <UnitName Value="PictureCtrls"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1165"/> <TopLine Value="430"/>
<CursorPos X="42" Y="1176"/> <CursorPos X="26" Y="443"/>
<UsageCount Value="31"/> <UsageCount Value="32"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit2> </Unit2>
<Unit3> <Unit3>
@ -169,19 +169,17 @@
<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="1133"/> <TopLine Value="41"/>
<CursorPos X="81" Y="1149"/> <CursorPos X="19" Y="52"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit12> </Unit12>
<Unit13> <Unit13>
<Filename Value="picturemanager.pas"/> <Filename Value="picturemanager.pas"/>
<UnitName Value="PictureManager"/> <UnitName Value="PictureManager"/>
<EditorIndex Value="2"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<CursorPos X="95" Y="2"/> <CursorPos X="95" Y="2"/>
<UsageCount Value="33"/> <UsageCount Value="33"/>
<Loaded Value="True"/>
</Unit13> </Unit13>
<Unit14> <Unit14>
<Filename Value="T:\ajlazctrls\dbdemo\bmprgbgraph.pas"/> <Filename Value="T:\ajlazctrls\dbdemo\bmprgbgraph.pas"/>
@ -242,10 +240,12 @@
<Unit21> <Unit21>
<Filename Value="bmprgbtypes.pas"/> <Filename Value="bmprgbtypes.pas"/>
<UnitName Value="BmpRGBTypes"/> <UnitName Value="BmpRGBTypes"/>
<EditorIndex Value="2"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1"/> <TopLine Value="591"/>
<CursorPos X="98" Y="4"/> <CursorPos X="20" Y="602"/>
<UsageCount Value="27"/> <UsageCount Value="28"/>
<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"/>
@ -290,8 +290,8 @@
<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="26"/> <TopLine Value="28"/>
<CursorPos X="5" Y="42"/> <CursorPos X="3" Y="39"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit27> </Unit27>
<Unit28> <Unit28>
@ -340,8 +340,8 @@
<Unit33> <Unit33>
<Filename Value="T:\fpclaz\laz\lcl\include\graphic.inc"/> <Filename Value="T:\fpclaz\laz\lcl\include\graphic.inc"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="116"/> <TopLine Value="1"/>
<CursorPos X="30" Y="130"/> <CursorPos X="1" Y="1"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit33> </Unit33>
<Unit34> <Unit34>
@ -357,9 +357,9 @@
<UnitName Value="DLBitmap"/> <UnitName Value="DLBitmap"/>
<EditorIndex Value="3"/> <EditorIndex Value="3"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="432"/> <TopLine Value="447"/>
<CursorPos X="19" Y="438"/> <CursorPos X="40" Y="460"/>
<UsageCount Value="15"/> <UsageCount Value="16"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit35> </Unit35>
<Unit36> <Unit36>
@ -391,9 +391,9 @@
<IsVisibleTab Value="True"/> <IsVisibleTab Value="True"/>
<EditorIndex Value="4"/> <EditorIndex Value="4"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="488"/> <TopLine Value="485"/>
<CursorPos X="2" Y="504"/> <CursorPos X="19" Y="490"/>
<UsageCount Value="13"/> <UsageCount Value="14"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit39> </Unit39>
<Unit40> <Unit40>
@ -404,128 +404,106 @@
<CursorPos X="91" Y="1811"/> <CursorPos X="91" Y="1811"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit40> </Unit40>
<Unit41>
<Filename Value="T:\fpclaz\laz\lcl\include\bitmapcanvas.inc"/>
<WindowIndex Value="0"/>
<TopLine Value="1"/>
<CursorPos X="1" Y="1"/>
<UsageCount Value="10"/>
</Unit41>
<Unit42>
<Filename Value="T:\fpclaz\laz\lcl\include\canvas.inc"/>
<WindowIndex Value="0"/>
<TopLine Value="135"/>
<CursorPos X="1" Y="141"/>
<UsageCount Value="10"/>
</Unit42>
</Units> </Units>
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="21" HistoryIndex="20">
<Position1> <Position1>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="177" Column="20" TopLine="145"/> <Caret Line="1135" Column="52" TopLine="1123"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="main.pas"/> <Filename Value="DLBmpUtils.inc"/>
<Caret Line="183" Column="16" TopLine="151"/> <Caret Line="503" Column="15" TopLine="491"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="main.pas"/> <Filename Value="DLBmpUtils.inc"/>
<Caret Line="257" Column="27" TopLine="225"/> <Caret Line="581" Column="96" TopLine="571"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="main.pas"/> <Filename Value="DLBitmap.pas"/>
<Caret Line="1197" Column="72" TopLine="10"/> <Caret Line="460" Column="20" TopLine="440"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1198" Column="72" TopLine="1167"/> <Caret Line="97" Column="90" TopLine="94"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1199" Column="72" TopLine="1168"/> <Caret Line="190" Column="19" TopLine="171"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1198" Column="72" TopLine="1167"/> <Caret Line="191" Column="19" TopLine="172"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1199" Column="72" TopLine="1168"/> <Caret Line="298" Column="27" TopLine="288"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1201" Column="72" TopLine="1170"/> <Caret Line="443" Column="26" TopLine="430"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="main.pas"/> <Filename Value="bmprgbtypes.pas"/>
<Caret Line="1337" Column="3" TopLine="1329"/> <Caret Line="131" Column="28" TopLine="120"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="main.pas"/> <Filename Value="bmprgbtypes.pas"/>
<Caret Line="1344" Column="3" TopLine="1336"/> <Caret Line="603" Column="33" TopLine="591"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="main.pas"/> <Filename Value="bmprgbtypes.pas"/>
<Caret Line="1105" Column="26" TopLine="1096"/> <Caret Line="602" Column="22" TopLine="591"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="picturectrls.pas"/> <Filename Value="bmprgbtypes.pas"/>
<Caret Line="193" Column="57" TopLine="181"/> <Caret Line="602" Column="20" TopLine="591"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="DLBitmap.pas"/> <Filename Value="DLBitmap.pas"/>
<Caret Line="510" Column="30" TopLine="506"/> <Caret Line="430" Column="17" TopLine="419"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="picturectrls.pas"/> <Filename Value="DLBmpUtils.inc"/>
<Caret Line="1176" Column="33" TopLine="1159"/> <Caret Line="573" Column="18" TopLine="557"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="DLBitmap.pas"/> <Filename Value="DLBmpUtils.inc"/>
<Caret Line="428" Column="28" TopLine="409"/> <Caret Line="573" Column="17" TopLine="557"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="DLBmpUtils.inc"/> <Filename Value="DLBitmap.pas"/>
<Caret Line="4" Column="96" TopLine="1"/> <Caret Line="439" Column="56" TopLine="435"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="DLBmpUtils.inc"/> <Filename Value="DLBitmap.pas"/>
<Caret Line="601" Column="1" TopLine="588"/> <Caret Line="449" Column="52" TopLine="438"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="DLBmpUtils.inc"/> <Filename Value="DLBitmap.pas"/>
<Caret Line="13" Column="89" TopLine="5"/> <Caret Line="41" Column="68" TopLine="34"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="DLBmpUtils.inc"/> <Filename Value="DLBitmap.pas"/>
<Caret Line="615" Column="45" TopLine="591"/> <Caret Line="78" Column="74" TopLine="433"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="DLBmpUtils.inc"/> <Filename Value="DLBitmap.pas"/>
<Caret Line="616" Column="59" TopLine="593"/> <Caret Line="41" Column="44" TopLine="31"/>
</Position21> </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="1135" Column="52" TopLine="1123"/>
</Position28>
<Position29>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="503" Column="15" TopLine="491"/>
</Position29>
<Position30>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="581" Column="96" TopLine="571"/>
</Position30>
</JumpHistory> </JumpHistory>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>