git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1606 8e941d3f-bd1b-0410-a28a-d453659cc2b4

This commit is contained in:
yangjixian
2011-05-02 08:07:14 +00:00
parent 19ee0dc43f
commit b9bf45bc79
3 changed files with 216 additions and 64 deletions

View File

@ -75,7 +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;
property Pixels[X, Y: Integer]: TColor read GetScanLinePixel write SetScanLinePixel;
end;
TTextEditor = class;
@ -133,11 +133,61 @@ function GetGColor(const Color: TColor): byte;
function GetBColor(const Color: TColor): byte;
procedure SprayPoints(aCanvas: TCanvas; X, Y: integer; Radians: integer; PColor: TColor);
procedure DLBMPColorReplace(aBitmap: TDLBitmap; ColorFrom, ColorTo: TColor);
operator + (const A, B: TRGBATriple): TRGBATriple;
operator - (const A, B: TRGBATriple): TRGBATriple;
operator * (const A, B: TRGBATriple): TRGBATriple;
operator div (const A, B: TRGBATriple): TRGBATriple;
function DWordTrans(SrcRow: TRGBATriple): DWORD;
function DWordToTriple(SrcRow: DWORD): TRGBATriple;
implementation
{$I DLBmpUtils.inc}
operator + (const A, B: TRGBATriple): TRGBATriple;
begin
Result.rgbtBlue := A.rgbtBlue + B.rgbtBlue;
Result.rgbtRed := A.rgbtRed + B.rgbtRed;
Result.rgbtGreen := A.rgbtBlue + B.rgbtGreen;
end;
operator - (const A, B: TRGBATriple): TRGBATriple;
begin
Result.rgbtBlue := A.rgbtBlue - B.rgbtBlue;
Result.rgbtRed := A.rgbtRed - B.rgbtRed;
Result.rgbtGreen := A.rgbtBlue - B.rgbtGreen;
end;
operator * (const A, B: TRGBATriple): TRGBATriple;
begin
Result.rgbtBlue := A.rgbtBlue * B.rgbtBlue;
Result.rgbtRed := A.rgbtRed * B.rgbtRed;
Result.rgbtGreen := A.rgbtBlue * B.rgbtGreen;
end;
operator div (const A, B: TRGBATriple): TRGBATriple;
begin
Result.rgbtBlue := A.rgbtBlue div B.rgbtBlue;
Result.rgbtRed := A.rgbtRed div B.rgbtRed;
Result.rgbtGreen := A.rgbtBlue div B.rgbtGreen;
end;
function DWordTrans(SrcRow: TRGBATriple): DWORD;
var RR, GG, BB: integer;
begin
RR := SrcRow.rgbtRed;
GG := SrcRow.rgbtGreen;
BB := SrcRow.rgbtBlue;
Result := RR + (GG shl 8) and $FF00 + (BB shl 16) and $FF0000;
end;
function DWordToTriple(SrcRow: DWORD): TRGBATriple;
begin
Result.rgbtBlue := (SrcRow shr 16) and $FF0000;
Result.rgbtGreen := (SrcRow shr 8) and $FF00;
Result.rgbtRed := SrcRow and $FF;
end;
constructor TDLBitmap.Create;
begin
inherited;

View File

@ -515,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
DLBmp.ScanLinePixels[X + a, Y + b] := PColor;
DLBmp.Pixels[X + a, Y + b] := PColor;
Radian2 := Radians div 3;
temp := Random(100);
a := Random(Round(Radian2 * 0.65));
@ -524,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
DLBmp.ScanLinePixels[X + a, Y + b] := PColor;
DLBmp.Pixels[X + a, Y + b] := PColor;
Radian3 := Radians * 2 div 3;
temp := Random(100);
a := Random(Round(Radian3 * 0.65));
@ -533,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
DLBmp.ScanLinePixels[X + a, Y + b] := PColor;
DLBmp.Pixels[X + a, Y + b] := PColor;
end;
DLBmp.InvalidateScanLineRect(Rect(X - Radians, Y - Radians, X + Radians, Y + Radians));
end;
@ -614,6 +614,64 @@ begin
aBitmap.InvalidateScanLine;
end;
procedure StretchLinear(Dest, Src: TDLBitmap); // only for 24bit bitmap
var
sw, sh, dw, dh, B, N, x, y, i, j, k, nPixelSize: DWord;
pLinePrev, pLineNext, pDest, pA, pB, pC, pD: pRGBATriple;
begin
sw := Src.Width - 1;
sh := Src.Height - 1;
dw := Dest.Width - 1;
dh := Dest.Height - 1;
nPixelSize := 3;
for i := 0 to dh do
begin
pDest := Dest.ScanLine[i];
y := i * sh div dh;
N := dh - i * sh mod dh;
pLinePrev := Src.ScanLine[y];
Inc(y);
if N = dh then
begin
pLineNext := pLinePrev;
end
else
begin
pLineNext := Src.ScanLine[y];
end;
for j := 0 to dw do
begin
x := j * sw div dw * nPixelSize;
B := dw - j * sw mod dw;
pA := pLinePrev;
Inc(pA, x);
pB := pA;
Inc(pB, nPixelSize);
pC := pLineNext;
Inc(pC, x);
pD := pC;
Inc(pD, nPixelSize);
if B = dw then
begin
pB := pA;
pD := pC;
end;
for k := 0 to nPixelSize - 1 do
begin
pDest^ := DWordToTriple(
(B * N * DWordTrans(pA^ - pB^ - pC^ + pD^) +
dw * N * DWordTrans(pB^) +
dh * B * DWordTrans(pC^) + (dw * dh - dh * B - dw * N) *
DWordTrans(pD^) +
dw * dh div 2) div (dw * dh));
Inc(pDest);
Inc(pA);
Inc(pB);
Inc(pC);
Inc(pD);
end;
end;
end;
end;

View File

@ -41,7 +41,7 @@
<PackageName Value="LCL"/>
</Item3>
</RequiredPackages>
<Units Count="43">
<Units Count="44">
<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="75"/>
<UsageCount Value="76"/>
</Unit0>
<Unit1>
<Filename Value="main.pas"/>
@ -62,7 +62,7 @@
<WindowIndex Value="0"/>
<TopLine Value="801"/>
<CursorPos X="34" Y="812"/>
<UsageCount Value="75"/>
<UsageCount Value="76"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
</Unit1>
@ -357,8 +357,8 @@
<UnitName Value="DLBitmap"/>
<EditorIndex Value="3"/>
<WindowIndex Value="0"/>
<TopLine Value="447"/>
<CursorPos X="40" Y="460"/>
<TopLine Value="164"/>
<CursorPos X="15" Y="180"/>
<UsageCount Value="16"/>
<Loaded Value="True"/>
</Unit35>
@ -391,8 +391,8 @@
<IsVisibleTab Value="True"/>
<EditorIndex Value="4"/>
<WindowIndex Value="0"/>
<TopLine Value="485"/>
<CursorPos X="19" Y="490"/>
<TopLine Value="616"/>
<CursorPos X="32" Y="661"/>
<UsageCount Value="14"/>
<Loaded Value="True"/>
</Unit39>
@ -418,92 +418,136 @@
<CursorPos X="1" Y="141"/>
<UsageCount Value="10"/>
</Unit42>
<Unit43>
<Filename Value="T:\operatoroverload\Unit1.pas"/>
<UnitName Value="Unit1"/>
<WindowIndex Value="0"/>
<TopLine Value="23"/>
<CursorPos X="15" Y="29"/>
<UsageCount Value="10"/>
</Unit43>
</Units>
<JumpHistory Count="21" HistoryIndex="20">
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="main.pas"/>
<Caret Line="1135" Column="52" TopLine="1123"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="97" Column="90" TopLine="94"/>
</Position1>
<Position2>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="503" Column="15" TopLine="491"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="190" Column="19" TopLine="171"/>
</Position2>
<Position3>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="581" Column="96" TopLine="571"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="191" Column="19" TopLine="172"/>
</Position3>
<Position4>
<Filename Value="DLBitmap.pas"/>
<Caret Line="460" Column="20" TopLine="440"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="298" Column="27" TopLine="288"/>
</Position4>
<Position5>
<Filename Value="picturectrls.pas"/>
<Caret Line="97" Column="90" TopLine="94"/>
<Caret Line="443" Column="26" TopLine="430"/>
</Position5>
<Position6>
<Filename Value="picturectrls.pas"/>
<Caret Line="190" Column="19" TopLine="171"/>
</Position6>
<Position7>
<Filename Value="picturectrls.pas"/>
<Caret Line="191" Column="19" TopLine="172"/>
</Position7>
<Position8>
<Filename Value="picturectrls.pas"/>
<Caret Line="298" Column="27" TopLine="288"/>
</Position8>
<Position9>
<Filename Value="picturectrls.pas"/>
<Caret Line="443" Column="26" TopLine="430"/>
</Position9>
<Position10>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="131" Column="28" TopLine="120"/>
</Position10>
<Position11>
</Position6>
<Position7>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="603" Column="33" TopLine="591"/>
</Position11>
<Position12>
</Position7>
<Position8>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="602" Column="22" TopLine="591"/>
</Position12>
<Position13>
</Position8>
<Position9>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="602" Column="20" TopLine="591"/>
</Position9>
<Position10>
<Filename Value="DLBitmap.pas"/>
<Caret Line="430" Column="17" TopLine="419"/>
</Position10>
<Position11>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="573" Column="18" TopLine="557"/>
</Position11>
<Position12>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="573" Column="17" TopLine="557"/>
</Position12>
<Position13>
<Filename Value="DLBitmap.pas"/>
<Caret Line="439" Column="56" TopLine="435"/>
</Position13>
<Position14>
<Filename Value="DLBitmap.pas"/>
<Caret Line="430" Column="17" TopLine="419"/>
<Caret Line="449" Column="52" TopLine="438"/>
</Position14>
<Position15>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="573" Column="18" TopLine="557"/>
</Position15>
<Position16>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="573" Column="17" TopLine="557"/>
</Position16>
<Position17>
<Filename Value="DLBitmap.pas"/>
<Caret Line="439" Column="56" TopLine="435"/>
</Position17>
<Position18>
<Filename Value="DLBitmap.pas"/>
<Caret Line="449" Column="52" TopLine="438"/>
</Position18>
<Position19>
<Filename Value="DLBitmap.pas"/>
<Caret Line="41" Column="68" TopLine="34"/>
</Position15>
<Position16>
<Filename Value="DLBitmap.pas"/>
<Caret Line="41" Column="44" TopLine="31"/>
</Position16>
<Position17>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="626" Column="33" TopLine="616"/>
</Position17>
<Position18>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="620" Column="59" TopLine="606"/>
</Position18>
<Position19>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="536" Column="13" TopLine="516"/>
</Position19>
<Position20>
<Filename Value="DLBitmap.pas"/>
<Caret Line="78" Column="74" TopLine="433"/>
<Caret Line="147" Column="47" TopLine="137"/>
</Position20>
<Position21>
<Filename Value="DLBitmap.pas"/>
<Caret Line="41" Column="44" TopLine="31"/>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="662" Column="20" TopLine="655"/>
</Position21>
<Position22>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="661" Column="34" TopLine="651"/>
</Position22>
<Position23>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="662" Column="30" TopLine="651"/>
</Position23>
<Position24>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="664" Column="35" TopLine="652"/>
</Position24>
<Position25>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="665" Column="26" TopLine="653"/>
</Position25>
<Position26>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="666" Column="40" TopLine="655"/>
</Position26>
<Position27>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="662" Column="18" TopLine="654"/>
</Position27>
<Position28>
<Filename Value="DLBitmap.pas"/>
<Caret Line="184" Column="23" TopLine="167"/>
</Position28>
<Position29>
<Filename Value="DLBitmap.pas"/>
<Caret Line="176" Column="5" TopLine="165"/>
</Position29>
<Position30>
<Filename Value="DLBitmap.pas"/>
<Caret Line="180" Column="16" TopLine="167"/>
</Position30>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>