TDLBitmap gets faster.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1608 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
yangjixian
2011-05-04 01:55:49 +00:00
parent 328c133706
commit 9b0d833ee6
4 changed files with 132 additions and 120 deletions

View File

@ -41,9 +41,13 @@ type
function GetScanLinePixel(X, Y: Integer): TColor;
procedure SetScanLinePixel(X, Y: Integer; Value: TColor);
protected
ImgHandle, ImgMaskHandle: HBitmap;
procedure SetWidth(Value: integer); override;
procedure SetHeight(Value: integer); override;
procedure Changed(Sender: TObject); override;
procedure InitializeReader(AImage: TLazIntfImage; AReader: TFPCustomImageReader); override;
procedure InitializeWriter(AImage: TLazIntfImage; AWriter: TFPCustomImageWriter); override;
procedure FinalizeWriter(AWriter: TFPCustomImageWriter); override;
public
constructor Create; override;
destructor Destroy; override;
@ -140,6 +144,7 @@ operator div (const A, B: TRGBATriple): TRGBATriple;
function DWordTrans(SrcRow: TRGBATriple): DWORD;
function DWordToTriple(SrcRow: DWORD): TRGBATriple;
procedure StretchLinear(Dest, Src: TDLBitmap);
procedure StretchDLBMP(Src: TDLBitmap; MultiX, MultiY: integer);
implementation
@ -214,25 +219,15 @@ begin
end;
procedure TDLBitmap.InvalidateScanLine;
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.Draw(0, 0, TmpBmp);
TmpBmp.Free;
Handle := ImgHandle;
MaskHandle := ImgMaskHandle;
end;
procedure TDLBitmap.InvalidateScanLineRect(aRect: TRect);
var
TmpBmp: TDLBitmap;
ImgHandle, ImgMaskHandle: HBitmap;
begin
TmpBmp := TDLBitmap.Create;
FIntfImgA.CreateBitmaps(ImgHandle, ImgMaskHandle, True);
@ -517,6 +512,22 @@ begin
SprayPoints(Self, x, y, radian, PColor);
end;
procedure TDLBitmap.InitializeReader(AImage: TLazIntfImage; AReader: TFPCustomImageReader);
begin
inherited;
FIntfImgA := AImage;
end;
procedure TDLBitmap.InitializeWriter(AImage: TLazIntfImage; AWriter: TFPCustomImageWriter);
begin
inherited;
end;
procedure TDLBitmap.FinalizeWriter(AWriter: TFPCustomImageWriter);
begin
inherited;
end;
procedure TDLBitmap.FillEllipse(X1, Y1, X2, Y2: integer);
begin
@ -659,11 +670,8 @@ begin
TextLeft := TextX + IMGCanvas.TextWidth(LeftText);
if IMGCanvas = nil then
Exit;
//IMGCanvas.TextOut(22, 22, FEdit.Text);
IMGCanvas.Brush.Style := bsClear;
IMGCanvas.TextOut(TextLeft, TextY, RightText);
//if PositionIndex <> FEdit.SelStart then
// PositionIndex := FEdit.SelStart;
PositionIndex := Length(FEdit.Text);
end;

View File

@ -535,7 +535,7 @@ begin
if (a * a + b * b < Sqr(Round(Radian3 * 0.65))) then
DLBmp.Pixels[X + a, Y + b] := PColor;
end;
DLBmp.InvalidateScanLineRect(Rect(X - Radians, Y - Radians, X + Radians, Y + Radians));
DLBmp.InvalidateScanLine;//Rect(Rect(X - Radians, Y - Radians, X + Radians, Y + Radians));
end;
function GetRColor(const Color: TColor): Byte;
@ -677,24 +677,26 @@ end;
procedure StretchDLBMP(Src: TDLBitmap; MultiX, MultiY: integer);
var
sw, sh, dw, dh, B, N, x, y, i, j, k, nPixelSize: DWord;
sw, sh, dw, dh, i, j, k, l, nPixelSize: DWord;
Dest: TDLBitmap;
begin
sw := Src.Width - 1;
sh := Src.Height - 1;
dw := (Src.Width - 1) * MultiX;
dh := (Src.Height - 1) * MultiY;
nPixelSize := 3;
for i := 0 to sh do
begin
for j := 0 to sw do
begin
for k := 0 to nPixelSize - 1 do
begin
end;
end;
end;
Dest := TDLBitmap.Create;
sw := Src.Width;
sh := Src.Height;
dw := Src.Width * MultiX;
dh := Src.Height * MultiY;
Dest.Width := dw;
Dest.Height := dh;
for i := 0 to sh - 1 do
for j := 0 to sw - 1 do
for k := 0 to MultiY - 1 do
for l := 0 to MultiX - 1 do
Dest.Pixels[j * MultiX + k, i * MultiY + l] := Src.Pixels[j, i];
Dest.InvalidateScanLine;
//Src.Assign(Dest);
Src.Width := dw;
Src.Height := dh;
Src.Canvas.Draw(0, 0, Dest);
Dest.Free;
end;

View File

@ -600,8 +600,10 @@ procedure TRGBBitmapCore.StretchDrawTo(ACanvas: TCanvas;
begin
if ACanvas <> nil then
// ACanvas.StretchDraw(Rect(DstX, DstY, DstWidth, DstHeight), Self);
// StretchDLBMP(Self, 3, 3);
begin
ACanvas.AntialiasingMode:=amOff;
ACanvas.CopyMode:=cmSrcPaint;
ACanvas.CopyRect(Rect(DstX, DstY, DstWidth, DstHeight), Self.Canvas, Rect(0,0,Width,Height));
end;
end;

View File

@ -72,7 +72,7 @@
<EditorIndex Value="1"/>
<WindowIndex Value="0"/>
<TopLine Value="430"/>
<CursorPos X="22" Y="443"/>
<CursorPos X="23" Y="443"/>
<UsageCount Value="32"/>
<Loaded Value="True"/>
</Unit2>
@ -170,8 +170,8 @@
<UnitName Value="Graphics"/>
<EditorIndex Value="3"/>
<WindowIndex Value="0"/>
<TopLine Value="1083"/>
<CursorPos X="15" Y="1094"/>
<TopLine Value="386"/>
<CursorPos X="13" Y="411"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit12>
@ -242,10 +242,11 @@
<Unit21>
<Filename Value="bmprgbtypes.pas"/>
<UnitName Value="BmpRGBTypes"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="2"/>
<WindowIndex Value="0"/>
<TopLine Value="589"/>
<CursorPos X="36" Y="604"/>
<TopLine Value="593"/>
<CursorPos X="29" Y="608"/>
<UsageCount Value="28"/>
<Loaded Value="True"/>
</Unit21>
@ -359,8 +360,8 @@
<UnitName Value="DLBitmap"/>
<EditorIndex Value="4"/>
<WindowIndex Value="0"/>
<TopLine Value="170"/>
<CursorPos X="15" Y="180"/>
<TopLine Value="124"/>
<CursorPos X="66" Y="143"/>
<UsageCount Value="16"/>
<Loaded Value="True"/>
</Unit35>
@ -390,11 +391,10 @@
</Unit38>
<Unit39>
<Filename Value="DLBmpUtils.inc"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="5"/>
<WindowIndex Value="0"/>
<TopLine Value="616"/>
<CursorPos X="32" Y="661"/>
<TopLine Value="671"/>
<CursorPos X="28" Y="701"/>
<UsageCount Value="14"/>
<Loaded Value="True"/>
</Unit39>
@ -431,124 +431,124 @@
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="picturectrls.pas"/>
<Caret Line="298" Column="27" TopLine="288"/>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="626" Column="33" TopLine="616"/>
</Position1>
<Position2>
<Filename Value="picturectrls.pas"/>
<Caret Line="443" Column="26" TopLine="430"/>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="620" Column="59" TopLine="606"/>
</Position2>
<Position3>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="131" Column="28" TopLine="120"/>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="536" Column="13" TopLine="516"/>
</Position3>
<Position4>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="603" Column="33" TopLine="591"/>
<Filename Value="DLBitmap.pas"/>
<Caret Line="147" Column="47" TopLine="137"/>
</Position4>
<Position5>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="602" Column="22" TopLine="591"/>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="662" Column="20" TopLine="655"/>
</Position5>
<Position6>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="602" Column="20" TopLine="591"/>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="661" Column="34" TopLine="651"/>
</Position6>
<Position7>
<Filename Value="DLBitmap.pas"/>
<Caret Line="430" Column="17" TopLine="419"/>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="662" Column="30" TopLine="651"/>
</Position7>
<Position8>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="573" Column="18" TopLine="557"/>
<Caret Line="664" Column="35" TopLine="652"/>
</Position8>
<Position9>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="573" Column="17" TopLine="557"/>
<Caret Line="665" Column="26" TopLine="653"/>
</Position9>
<Position10>
<Filename Value="DLBitmap.pas"/>
<Caret Line="439" Column="56" TopLine="435"/>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="666" Column="40" TopLine="655"/>
</Position10>
<Position11>
<Filename Value="DLBitmap.pas"/>
<Caret Line="449" Column="52" TopLine="438"/>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="662" Column="18" TopLine="654"/>
</Position11>
<Position12>
<Filename Value="DLBitmap.pas"/>
<Caret Line="41" Column="68" TopLine="34"/>
<Caret Line="184" Column="23" TopLine="167"/>
</Position12>
<Position13>
<Filename Value="DLBitmap.pas"/>
<Caret Line="41" Column="44" TopLine="31"/>
<Caret Line="176" Column="5" TopLine="165"/>
</Position13>
<Position14>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="626" Column="33" TopLine="616"/>
</Position14>
<Position15>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="620" Column="59" TopLine="606"/>
</Position15>
<Position16>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="536" Column="13" TopLine="516"/>
</Position16>
<Position17>
<Filename Value="DLBitmap.pas"/>
<Caret Line="147" Column="47" TopLine="137"/>
</Position17>
<Position18>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="662" Column="20" TopLine="655"/>
</Position18>
<Position19>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="661" Column="34" TopLine="651"/>
</Position19>
<Position20>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="662" Column="30" TopLine="651"/>
</Position20>
<Position21>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="664" Column="35" TopLine="652"/>
</Position21>
<Position22>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="665" Column="26" TopLine="653"/>
</Position22>
<Position23>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="666" Column="40" TopLine="655"/>
</Position23>
<Position24>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="662" Column="18" TopLine="654"/>
</Position24>
<Position25>
<Filename Value="DLBitmap.pas"/>
<Caret Line="184" Column="23" TopLine="167"/>
</Position25>
<Position26>
<Filename Value="DLBitmap.pas"/>
<Caret Line="176" Column="5" TopLine="165"/>
</Position26>
<Position27>
<Filename Value="DLBitmap.pas"/>
<Caret Line="180" Column="16" TopLine="167"/>
</Position27>
<Position28>
</Position14>
<Position15>
<Filename Value="picturectrls.pas"/>
<Caret Line="443" Column="22" TopLine="430"/>
</Position15>
<Position16>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="131" Column="28" TopLine="120"/>
</Position16>
<Position17>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="603" Column="18" TopLine="589"/>
</Position17>
<Position18>
<Filename Value="picturectrls.pas"/>
<Caret Line="443" Column="23" TopLine="430"/>
</Position18>
<Position19>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="131" Column="28" TopLine="116"/>
</Position19>
<Position20>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="603" Column="27" TopLine="585"/>
</Position20>
<Position21>
<Filename Value="DLBitmap.pas"/>
<Caret Line="232" Column="14" TopLine="218"/>
</Position21>
<Position22>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="603" Column="17" TopLine="588"/>
</Position22>
<Position23>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="606" Column="16" TopLine="588"/>
</Position23>
<Position24>
<Filename Value="T:\fpclaz\laz\lcl\graphics.pp"/>
<Caret Line="1158" Column="28" TopLine="1143"/>
</Position24>
<Position25>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="606" Column="16" TopLine="588"/>
</Position25>
<Position26>
<Filename Value="T:\fpclaz\laz\lcl\graphics.pp"/>
<Caret Line="1158" Column="27" TopLine="1143"/>
</Position26>
<Position27>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="606" Column="17" TopLine="588"/>
</Position27>
<Position28>
<Filename Value="T:\fpclaz\laz\lcl\graphics.pp"/>
<Caret Line="1158" Column="75" TopLine="1143"/>
</Position28>
<Position29>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="131" Column="28" TopLine="120"/>
<Caret Line="606" Column="28" TopLine="591"/>
</Position29>
<Position30>
<Filename Value="bmprgbtypes.pas"/>
<Caret Line="603" Column="18" TopLine="589"/>
<Caret Line="608" Column="63" TopLine="593"/>
</Position30>
</JumpHistory>
</ProjectOptions>