U
ujin
Unregistered / Unconfirmed
GUEST, unregistred user!
对于手工绘制的图形,当改变Image大小而重绘图形时,CPU占用率极高(为赛扬1G+128M 内存),速度很慢,Canvas.StretchDraw的效率就是这么低吗?怎样使图形重绘时CPU占用率降下来。
代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Image2: TImage;
Image3: TImage;
procedure FormShow(Sender: TObject);
procedure Image2Click(Sender: TObject);
procedure Image2DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TMyPix=Class
PixX:integer;
PixY:integer;
end;
var
Form1: TForm1;
JP,TmpJP:TBitmap;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
image2.Width :=663;
image2.Height :=458;
Image2.Canvas.MoveTo(100,100);
Image2.Canvas.LineTo(100,300);
Image2.Canvas.LineTo(300,300);
Image2.Canvas.MoveTo(300,300-15);
Image2.Canvas.LineTo(300,300-15+40);
Image2.Canvas.LineTo(300+36,300-15+40);
Image2.Canvas.LineTo(300+36,300-15);
Image2.Canvas.LineTo(300,300-15);
Image2.Canvas.TextOut(310,300-12,'256');
Image2.Canvas.TextOut(310,300,'423');
Image2.Canvas.TextOut(310,300+12,'789');
Image2.Canvas.MoveTo(28,28);
Image2.Canvas.LineTo(28,32);
Image2.Canvas.LineTo(32,32);
Image2.Canvas.LineTo(32,28);
Image2.Canvas.LineTo(28,28);
Image2.Canvas.MoveTo(128,128);
Image2.Canvas.LineTo(128,132);
Image2.Canvas.LineTo(132,132);
Image2.Canvas.LineTo(132,128);
Image2.Canvas.LineTo(128,128);
Image2.Canvas.MoveTo(228,228);
Image2.Canvas.LineTo(228,232);
Image2.Canvas.LineTo(232,232);
Image2.Canvas.LineTo(232,228);
Image2.Canvas.LineTo(228,228);
Image2.Canvas.MoveTo(328,328);
Image2.Canvas.LineTo(328,332);
Image2.Canvas.LineTo(332,332);
Image2.Canvas.LineTo(332,328);
Image2.Canvas.LineTo(328,328);
Image2.Canvas.MoveTo(428,428);
Image2.Canvas.LineTo(428,432);
Image2.Canvas.LineTo(432,432);
Image2.Canvas.LineTo(432,428);
Image2.Canvas.LineTo(428,428);
JP:=TBitmap.Create;
JP.Assign(Image2.Picture.Graphic );
end;
procedure TForm1.Image2Click(Sender: TObject);
begin
image2.Width :=1326;
image2.Height :=916;
Image2.Picture.Assign(nil);
image2.Canvas.StretchDraw(Rect(0,0,1326,916),JP);
end;
procedure TForm1.Image2DblClick(Sender: TObject);
begin
image2.Width :=663;
image2.Height :=458;
Image2.Picture.Assign(nil);
image2.Canvas.StretchDraw(Rect(0,0,663,458),JP);
end;
end.
代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Image2: TImage;
Image3: TImage;
procedure FormShow(Sender: TObject);
procedure Image2Click(Sender: TObject);
procedure Image2DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TMyPix=Class
PixX:integer;
PixY:integer;
end;
var
Form1: TForm1;
JP,TmpJP:TBitmap;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
image2.Width :=663;
image2.Height :=458;
Image2.Canvas.MoveTo(100,100);
Image2.Canvas.LineTo(100,300);
Image2.Canvas.LineTo(300,300);
Image2.Canvas.MoveTo(300,300-15);
Image2.Canvas.LineTo(300,300-15+40);
Image2.Canvas.LineTo(300+36,300-15+40);
Image2.Canvas.LineTo(300+36,300-15);
Image2.Canvas.LineTo(300,300-15);
Image2.Canvas.TextOut(310,300-12,'256');
Image2.Canvas.TextOut(310,300,'423');
Image2.Canvas.TextOut(310,300+12,'789');
Image2.Canvas.MoveTo(28,28);
Image2.Canvas.LineTo(28,32);
Image2.Canvas.LineTo(32,32);
Image2.Canvas.LineTo(32,28);
Image2.Canvas.LineTo(28,28);
Image2.Canvas.MoveTo(128,128);
Image2.Canvas.LineTo(128,132);
Image2.Canvas.LineTo(132,132);
Image2.Canvas.LineTo(132,128);
Image2.Canvas.LineTo(128,128);
Image2.Canvas.MoveTo(228,228);
Image2.Canvas.LineTo(228,232);
Image2.Canvas.LineTo(232,232);
Image2.Canvas.LineTo(232,228);
Image2.Canvas.LineTo(228,228);
Image2.Canvas.MoveTo(328,328);
Image2.Canvas.LineTo(328,332);
Image2.Canvas.LineTo(332,332);
Image2.Canvas.LineTo(332,328);
Image2.Canvas.LineTo(328,328);
Image2.Canvas.MoveTo(428,428);
Image2.Canvas.LineTo(428,432);
Image2.Canvas.LineTo(432,432);
Image2.Canvas.LineTo(432,428);
Image2.Canvas.LineTo(428,428);
JP:=TBitmap.Create;
JP.Assign(Image2.Picture.Graphic );
end;
procedure TForm1.Image2Click(Sender: TObject);
begin
image2.Width :=1326;
image2.Height :=916;
Image2.Picture.Assign(nil);
image2.Canvas.StretchDraw(Rect(0,0,1326,916),JP);
end;
procedure TForm1.Image2DblClick(Sender: TObject);
begin
image2.Width :=663;
image2.Height :=458;
Image2.Picture.Assign(nil);
image2.Canvas.StretchDraw(Rect(0,0,663,458),JP);
end;
end.