关于图形的放大、缩小问题(200分)

  • 主题发起人 主题发起人 JinBo
  • 开始时间 开始时间
J

JinBo

Unregistered / Unconfirmed
GUEST, unregistred user!
详细内容:<br>放大缩小时用到的代码:<br>procedure TForm1.Zoom ;<br>begin<br>&nbsp; SetMapMode(Canvas.Handle, MM_ISOTROPIC);<br>&nbsp; SetWindowExtEx(Canvas.Handle,FWinExt,FWinExt,nil);<br>&nbsp; SetViewPortExtEx(Canvas.Handle,FViewExt,FViewExt,nil);<br>&nbsp; SetWindowOrgEx(.Canvas.Handle,FXOrg,FYOrg,nil);<br>end ;<br><br>初始化: FViewExt = 100 ,FWinExt = 100 FXorg = 0 FYorg = 0<br>我是改变变量 FViewExt 的值达到放大缩小的<br>打开系统资源监视器,<br><br>当我调用方法 Canvas.TextOut(20,20,'测试文字') 输出文字,<br>......同时还有其它绘图方法......<br><br>不断放大缩小来回五六次后,资源监视器线条出现红色表示资源快耗尽<br>&nbsp;就会出现资源不足对话框<br><br>当我屏蔽方法 Canvas.TextOut(20,20,'测试文字') <br>还有其它绘图方法,资源监视器不会变红色,黄色都不会出现太正常了<br>&nbsp;我怀疑是因为输出文字耗了很多资源<br>我在 pwin98 ,delphi3 下运行的<br><br>   请多多指教<br><br>  先谢了<br>
 
没作过,但手头上好象有一篇资料。<br>找找看....<br>要用银子买哟!~-~<br>
 
能说说你的环境吗?<br>是9X还是NT,<br>那红线代表什么资源?<br>&gt;......同时还有其它绘图方法......<br>还作了什么处理?<br><br>只是从上面的代码好象没什么问题;-)<br><br>
 
最好在开始缩放前用savedc保存当前canvas.handle. 画完之后用restoredc<br>恢复成原始dc.<br>例如:<br>var<br>&nbsp; saveindex: Integer;<br><br>procedure zoom;<br>begin<br>&nbsp; saveindex := savedc(canvas.handle);<br>&nbsp; ......<br>end;<br><br>procedure paintingfinish;<br>begin<br>&nbsp; restoredc(canvas.handle, saveindex);<br>end;
 
谢各位的回答!<br>To amo:<br>&nbsp; 操作系统是Win98,程序用Delphi3编写。红线是指资源下降到极低点。<br>&nbsp; 其它绘图方法指使用其它API都不会产生这种问题。<br>&nbsp; &nbsp; &nbsp; &nbsp;<br>&gt; 只是从上面的代码好象没什么问题<br>&nbsp; 程序没有问题,只是它把系统资源全消耗了。<br><br>to W.H.:该方法早已经试过,不行!
 
你用TrueType字体,别用图形了,<br>请到http://202.103.176.81/frun/shangrw/下载我的报表控件看看,我是用<br>TrueType字体及WMF文件操作的,可以无限缩放。
 
to www:<br>谢谢你的回答,不过你实现的方式与我的要求不一致,我不能使用这种方式。<br><br>请大家继续回答!
 
请继续回答!
 
我用VC时也遇到过相同的问题<br>关键是要注意释放GDI资源<br>如Pen,Font,bitmap等等<br>都要注意释放,否则首先就会在<br>图象缩放时出问题(即使用TRUETYPE缩放字体<br>也会有问题)。<br>所以我建议你查查有没有GDI资源用了<br>以后没释放。
 
用TImage的Strech(好象是这样拼的)就可以放大、缩小图形,<br>只要将TImage的大小设置好, 再用SaveToFile方法保存, 缺点是只能保存为BMP文件.
 
用Canvas的CopyRect不也可以放大缩小吗?<br>不过要记得释放资源.
 
如果已经使用API中的GDI函数, 那就使用API中的TEXTOUT函数, 具体使用细节, <br>请参阅WIN32 API的HELP文件,保证编程的前后一致。
 
好像有个控件<br>&nbsp; 可完成此功能,如需要我就去找找
 
我有个控件可实现该功能。要的话说一声。
 
设置TImage的Stretch属性为true;再改变TImage的大小,多简单啊!!!!
 
to 悲酥清风:<br>&nbsp; 能否给我寄一份:xxz007@yeah.net
 
BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop )<br>or cavas.copyrect<br><br>
 
to 悲酥清风:<br>&nbsp; 我也想要一份swallowinsky@sohu.com,thanks!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
591
import
I
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部