用GDI+的效率问题

JasonCharlesBourne 2017-06-14 05:40:21
一个界面中有30*20组数据,这些数据都是通过Graphics的DrawString来画在界面上的,现在发现数据较多时每次重绘时DrawString占用掉比较大的时间,导致界面卡顿,请问有什么好方法来解决呢。
...全文
900 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-03-08
  • 打赏
  • 举报
回复
引用 13 楼 HEXBOSS 的回复:
大家好,有什么在VS2013 下还有那些比如:EASYSIZE的工具代码。 实现界面随DPI 缩放?
WPF ?
HEXBOSS 2018-03-07
  • 打赏
  • 举报
回复
大家好,有什么在VS2013 下还有那些比如:EASYSIZE的工具代码。 实现界面随DPI 缩放?
draculamx 2018-01-07
  • 打赏
  • 举报
回复
如果你在win7上使用,可以考虑Direct2D,它采用GPU加速绘图,和DirectX一个速度等级,但是比DirectX用起来方便点,两者本质相同,都是调用GPU绘图 或者放弃GDI+,直接使用GDI,GDI比GDI+快很多 总之在对绘图有时效要求的情况下,最好不要使用GDI+,它用来做GUI还行,速度太慢了
hrtem 2018-01-05
  • 打赏
  • 举报
回复
要么画一个小的区域,要么不要GDI+改用directX
赵4老师 2017-12-05
  • 打赏
  • 举报
回复
话说显示出来谁能看得清哪些数据发生了变化?是变大还是变小了?
boylafong 2017-12-04
  • 打赏
  • 举报
回复
应该确定你需求是什么 比如最低刷新频率要求是多少?还是说确实需要每组数据都必须显示一下 一般来说只是显示作用,很多情况下不需要那么高的刷新频率,500毫秒应该够了,再多你人也看不清啊
夫人的泡泡鱼 2017-12-01
  • 打赏
  • 举报
回复
引用 6 楼 schlafenhamster 的回复:
“每次重绘时DrawString占用掉比较大的时间” 每次重绘 要 重绘 600 个 ? 把 数据 变成 字串 放 CStringArray 中,不要每次 都 转换
可以在串口接收程序中使用, CArray<int,int&> dataList; dataList.Add(); Invalidate(); UpdateWindow(); 在OnPaint()中读取数据并显示
qsjming 2017-12-01
  • 打赏
  • 举报
回复
是否跟刷新有关呢,可以指定刷新区域,不要刷新全部的区域。
worldy 2017-06-15
  • 打赏
  • 举报
回复
postmessage 每接收一个数据,你就画一次,你效率太低,觉得你应该使用定时刷新,比较合理
JasonCharlesBourne 2017-06-15
  • 打赏
  • 举报
回复
引用 1 楼 worldy 的回复:
虽然GDI+效率比较低,但是如果绘画范围限制在屏幕内,一般不至于卡顿,你的问题估计是没有判断是否超出屏幕范围,超出范围之外的也去绘画(超出屏幕范围画了也白画)
判断只在界面的Rect内画的,这个数据是从串口里读出来然后postmessage到界面 的,所以这个调用频率很高。
schlafenhamster 2017-06-15
  • 打赏
  • 举报
回复
“每次重绘时DrawString占用掉比较大的时间” 每次重绘 要 重绘 600 个 ? 把 数据 变成 字串 放 CStringArray 中,不要每次 都 转换
JasonCharlesBourne 2017-06-15
  • 打赏
  • 举报
回复
引用 4 楼 schlafenhamster 的回复:
有30*20组数据 是什么东东 ?
就是串口每接收一帧数据里有600个int类型的数据,这600个数据需要更新绘制到界面上
schlafenhamster 2017-06-15
  • 打赏
  • 举报
回复
有30*20组数据 是什么东东 ?
worldy 2017-06-14
  • 打赏
  • 举报
回复
虽然GDI+效率比较低,但是如果绘画范围限制在屏幕内,一般不至于卡顿,你的问题估计是没有判断是否超出屏幕范围,超出范围之外的也去绘画(超出屏幕范围画了也白画)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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