求助!绘图效率低及画布放大与缩小?(100分)

  • 主题发起人 主题发起人 pyxyu
  • 开始时间 开始时间
P

pyxyu

Unregistered / Unconfirmed
GUEST, unregistred user!
在image1绘图时在画布上添加元素多的情况下,占用内存多将导致死机.
还有怎么放大与缩小画布?
核心代码如下:

private
btmp:TBitMap;
picList:Tlist; //存放画布上的元素
selpic:TBasepic;//基础类
LinePic:TLinePic; //直线 是自己定义的一个类
CircPic:TCircPic; //圆
... //等

procedure TForm1.FormCreate(Sender: TObject);
begin
//创建对象
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//释放对象
end;

procedure TForm1..PicDrawEndEvent(Pic: TComponent); //添加图形元素
var
PicLine:TLinePic;
PicCirc:TCircPic;
begin
Case TPicBase(Pic).PicId of
PIC_LINE:
begin
PicLine:=TLinePic.Create;
PicLine.AssignPic(TLinePic(Pic));
PicLine.PicIndex:=PicList.Count;
PicList.Add(PicLine);
end;
PIC_CIRC:
begin
PicCirc:=TCircPic.Create;
PicCirc.AssignPic(TCircPic(Pic));
PicCirc.PicIndex:=PicList.Count;
//PicCirc.PicPen.Color := clBlack;
end;
GetImageCanvasBmp(False,True,[ssDouble],0);
end;


procedure Tfrm1_Main.GetImageCanvasBmp(DisChoose:Boolean; DrawToImage:Boolean; //刷新代码
Shift: TShiftState; State: Integer);
var
i1:Integer;
begin
OffSrc.Canvas.Brush.Color:=clBlack;
OffSrc.Canvas.FillRect(Rect(0,0,OffSrc.Width,OffSrc.Height));

For i1:=0 to PicList.Count-1 do begin
TPicBase(PicList.Items[i1]).DrawPic(OffSrc.Canvas);
end;

if DrawToImage then image1.Canvas.Draw(0,0,OffSrc);
Image1.Picture.Bitmap:=OffSrc;
end;
 
你把画布上所有的对象都建立并记录下来,这样对象很多的时候可能真的会耗尽资源。
我想起使用2000年之前,老版本的cad,那时计算机内存很小,操作的时候硬盘读写频繁。你是不是也可以考虑这样的方式?当系统资源不足时,存储一些信息到磁盘。
 
在windows下DrawDibDraw是最快的缩放方法stretchblt算法最快
可是都达不到我的要求 现在希望mmx或sse2指令了
 
高手的问题
 
思想不合理。
http://www.codeidea.com
 
多到了一个什么样子!?
 
有时间看看我的程序:
http://free.ys168.com/?idelphi
 
呵呵,天河,你的空间被锁了都不知道呀.
 
缩放思想不是合理,缩大一倍就是将BITMAP放大一倍.然后重绘所有图像,占用内存很多.
 
局部刷新。
反正放大了,也只能显示一屏(800×600 或 1024×768 。。。。。。)
 
我现在也需要这方面的知识,
 
后退
顶部