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 SetOutlineColor(const AValue: TColor);
procedure SetPaperColor(const AValue: TColor);
function GetScanLinePixel(X, Y: Integer): TColor;
procedure SetScanLinePixel(X, Y: Integer; Value: TColor);
protected
procedure SetWidth(Value: integer); override;
procedure SetHeight(Value: integer); override;
@ -73,6 +75,7 @@ type
property FillColor: TColor read GetFillColor write SetFillColor;
property OutlineColor: TColor read GetOutlineColor write SetOutlineColor;
property PaperColor: TColor read GetPaperColor write SetPaperColor;
property ScanLinePixels[X, Y: Integer]: TColor read GetScanLinePixel write SetScanLinePixel;
end;
TTextEditor = class;
@ -433,6 +436,31 @@ begin
Canvas.FloodFill(x, y, Canvas.Pixels[x, y], fsSurface);
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);
begin
SprayPoints(Self, x, y, radian, PColor);

View File

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

View File

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