放大的图像如何实现漫游?(300分)

  • 主题发起人 主题发起人 ow
  • 开始时间 开始时间
O

ow

Unregistered / Unconfirmed
GUEST, unregistred user!
我目前在做一个程序,需要把图像放大到任意大小,并且支持图像的漫游(即用鼠标可以
平滑拖动这幅放大后的图像),请问应该如何实现?
 
1 Image stretch 属性为TRUE 时图象随SIZE 自动缩放,
2 把IMAGE放在滚动框里,控制鼠标事件
 
http://tingweb.363.net/tips/25/tips2519.htm
 
如果是矢量图,请看YYSUN的教材《计算机地图制图》:
http://c_a_c.myetang.com/
部分内容未全,有完整的DEMO(非常好的东西),可以下载程序和源程序。

如果是平面图像,如果你愿意,我可以发一个我的小DEMO给你。
 
to Huzzz:
方便的话,发一个给我吧, ccw@zju.edu.cn
 
ow:
邮件已发,收到请给一个回复或建议。
 
to Huzzz:
不好意思,我到现在还没有收到您的信,您能否改发到chcw@21cn.com,谢谢。
 
to Huzzz:
多谢,邮件已经收到。
 
你看我的這個問題﹐就是你想要的,一模一樣﹐哈﹐當初我出200分﹐你出300分。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=684538
 
to Huzzz:
非常感谢您的代码,我有一个问题想请教,当图像放大后,你用FBufBitmap来存放放大后
的图像,那么如果图像放大到10000 x 10000, 或者大到TBitmap无法处理的程度,那么该
怎么办呢?
 
大到無法處理﹐如果你還能打開﹐你可以分割圖像看看﹐只取那一部分﹐我沒試過﹐說說而已。
 
ow: FBufBitmap只会保存当前VIEW视区大小的图形,并不是整个!!
其实FBufBitmap是一个屏幕图形缓冲。
 
to Huzzz:
我明白了,谢谢你。还有个问题想请教,你的鼠标在Pan模式的时候,每移动一次鼠标,
就要把FGraphic画到FBufBMP上,然后再把FBufBMP的内容画到控件的Canvas上,那么为什么
不直接把FGraphic画到控件的Canvas上呢?
 
这是为了把缩放平移后的画图结果缓存下来,如果用户停止缩放平移,那么画图刷新
速度就比较快(如最小化后再复原,只是一次BITBLT的时间),也可以减少一些闪烁。
不过在此DEMO中用处不是很大。
另外你可以发现图形太大时放大速度比较慢。我对BMP图作了处理,对BMP的放大会比
较快。
 
ow: 我后来作了改进,对JPEG的放大也进行了优化,提高了JPEG放大速度。
 
to Huzzz:
多谢你。关于第187行 StretchDraw(R, FGraphic); 我还有一点小问题不明白:
1. R的范围和FBufBMP.Canvas的大小不一致,不会产生问题吗?
2. R的范围如果超出了FBufBMP.Canvas的大小,那么StretchDraw还会不会
花费CPU时间在超出的部分上进行绘图。
3. R的范围有没有限制?
谢谢。

 
1. R的范围和FBufBMP.Canvas的大小不一致,不会产生问题吗?
一般不会。

2. R的范围如果超出了FBufBMP.Canvas的大小,那么StretchDraw还会不会
花费CPU时间在超出的部分上进行绘图。
这个StretchDraw是由Graphic实现的,因此一般都会。我们没法改这个StretchDraw。
如TBitmap和TMetafile的StretchDraw是完全不一样的。但我们可以通过一些办法减少
这种花费。你看我在输出BMP时我就作了处理,加快了StretchDraw。

3. R的范围有没有限制?
有的。跟TRect和Canvas(HDC)的定义有关。但一般来说不会超出。
 
接受答案了.
 
后退
顶部