求教 C#大图像处理问题

lxh0129 2010-01-13 04:07:01
场景:(1)有大量的数据,需要以某种蛮复杂的表格显示;
(2)表格和数据先在内存中绘制,然后呈现;
(3)数据变化频率不高,但用户可以选择部分数据显示,这样的话,可能表格图像要重画;
(4)支持在呈现出来的图像上涂鸦;
(5)涂鸦的记录要合并到图像中;

我现在的做法:
(1)绘制表格单独做了一个库,支持每个单元格的tooltip显示信息(虽然最终出来的是图片)以及各种样式的控制;
(2)用了双缓冲实现图片的绘制(但真的一点也不理想,后面谈了具体问题);
(3)涂鸦是直接绘制在图像框里
说实在的,实在是在普通不过的做法,我知道这肯定是不行的。

出现的部分重要问题:
(1)图片显示太慢,从上往下看得见一部分一部分的显示;
(2)图片太大,如表格超过4000行,就更慢了,内存吃了太多,整个系统都快跨了;
(3)滚动条拖动图片,抖动太厉害,闪烁的让眼睛都绿了,我的电脑配置可能比一般的用户(将来这个系统的)电脑的配置要高点;

我有改进,想让图片部分慢慢的显示,可是,貌似效果不佳,而且这样体验不好,看得见图片一块一块的拼出来,可能是我切块太大

不知道人家的股票系统是用什么绘制出来的,那么流畅,还有像teamviewer这样的协助软件,它的远程桌面图像也那么大,还要经过网络传输,显示的仍然那么流畅...估计不是用DirectX。

唉,这方面经验太缺乏了

哪位朋友有过类似的处理经验,能不能分享下,期待朋友们的帮助!!
...全文
148 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChrisAK 2010-01-15
  • 打赏
  • 举报
回复
至于图片显示过慢...我以前用GDI+双缓冲做大图(3k*4k以上)的拖动效果还不错.
所以慢可能是因为你的内存图过大导致的.如果排除了内存耗用的问题仍然过慢...
可以考虑用DrawDib.
ChrisAK 2010-01-15
  • 打赏
  • 举报
回复
4K行你一次就画完了?
那消耗不大才怪...

这种程序应该显示多少画多少.
vcthugo 2010-01-15
  • 打赏
  • 举报
回复
可以只把屏幕大小的部分显示出来,不用全部显示。记得好像孙鑫的《深入浅出c++》上有这么个类的问题。你可以看看。
yingkk 2010-01-15
  • 打赏
  • 举报
回复
有很多原因能导致显示慢的,你得像你上面场景中列举的步骤,一步步测试,每步都计算下消耗的时间。究竟是哪里慢了,单说是说不明白的。大地图最好不要一次显示出来,实时GDI绘画可见部分就行。拖动图片也一样,也能实时实时绘画的。你可以用Application.idle这个事件来触发。

yingkk 2010-01-15
  • 打赏
  • 举报
回复
我觉的楼主和游戏中地图编辑差不多,主要就是内存优化显示问题,可以看看这个简单的地图编辑C# 还有你也可以使用各种3D的引擎框架之类,因为那些已经对大地图显示之类优化了,像微软的XNA和CSGL(opengl for c#),比如OGRE也可以。
lxh0129 2010-01-14
  • 打赏
  • 举报
回复
自己顶一下,期待更多朋友的帮助!
hotmail_mk 2010-01-13
  • 打赏
  • 举报
回复
给你一个思路,也不知道是否适合你,加载图像的时候只加载在图像框里的那部分,就是把图像分成多个块加载
平生我自如 2010-01-13
  • 打赏
  • 举报
回复
只能帮你顶一下了!

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧