在image1画图时在画布上添加元素多的情况下,占用内存多将导致死机.
还有怎么放大与缩小画布?
核心代码如下:private
OffSrc: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;
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;
还有怎么放大与缩小画布?
核心代码如下:private
OffSrc: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;
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;
解决方案 »
- checklistbox 怎么 在运行时 隐藏个别选项啊?
- 求救高手!!! 有关delphi 的停靠技术的问题
- 求教这样的SQL怎么写??
- 關於 crystal report 9的不能根據表裏的數據自動刷新,着急!!高手幫忙
- 帮助看这么一段代码(让窗口无焦点)怎么不行
- delphi 高手,如何交文本文件导入到Memo控件!
- 那里有数据库的教学软件啊
- 怎么连到后台数据库?
- 关于Installshield(我在Installshield6.2中安装,能创建快捷方式,可是在7.0中创建不了呀!!)
- 集思广益——怎样编写"搜索机器人"?
- 关于DLL 调用 跪求高手解决
- 怎样在ScrollBox中进行label的拖放操作并取得label的座标值
试试PaintBox呢,看会不会好一点。
你以左上角为参考点,所有点的坐标缩小一半,就是(50,50)-(100,100),那么这直线就缩小了一半,长度为50*1.414。(缺点是缩小都向左上角,放大都向右下角。)如果你要避免上述的缺点,像photpshop那样原地放大,缩小(即向四周散开),就比较麻烦。除了上面修正坐标外,还要移动图形。