系统是怎么画图的?

Greger_Hu 2016-12-27 08:57:16
编程时调用一个rectangle或者lineto就可以实现画线画矩形,但他是怎么实现的,是靠一个点一个点的修改颜色吗?我用画点的方法画一条直线花了30多毫秒,而调用函数一毫秒都不要,无论是画圆还是画矩形。这是为什么? 我想可能是他们是先将点的信息存到显卡缓冲区,等输入完毕,再集中显示?是这样吗?那我们要输入缓冲区该怎么做? 还有我为什么要问这个问题,我在做一个图像显示的程序,可能要有缩放这类功能,必须从点的角度进行处理,如果一个点一个点的处理,用循环是不是太慢了?怎么办?谁能告诉我缩放是怎么实现的。
...全文
214 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-12-30
  • 打赏
  • 举报
回复
《计算机图形学》光栅化
真相重于对错 2016-12-29
  • 打赏
  • 举报
回复
引用 楼主 hw824393385 的回复:
编程时调用一个rectangle或者lineto就可以实现画线画矩形,但他是怎么实现的,是靠一个点一个点的修改颜色吗?我用画点的方法画一条直线花了30多毫秒,而调用函数一毫秒都不要,无论是画圆还是画矩形。这是为什么? 我想可能是他们是先将点的信息存到显卡缓冲区,等输入完毕,再集中显示?是这样吗?那我们要输入缓冲区该怎么做? 还有我为什么要问这个问题,我在做一个图像显示的程序,可能要有缩放这类功能,必须从点的角度进行处理,如果一个点一个点的处理,用循环是不是太慢了?怎么办?谁能告诉我缩放是怎么实现的。
求出缩放矩阵,直接相乘,具体查百度
ooolinux 2016-12-28
  • 打赏
  • 举报
回复
调用画点的函数画一条线,函数调用的开销有多少,好比你出门搬一件东西,入门,再出门搬一件东西,再入门。 画线的函数就是出门,搬完所有东西,入门。 而且系统的函数,底层耗时部分可能是汇编优化的。
ipqtjmqj 2016-12-28
  • 打赏
  • 举报
回复
计算是快的,慢的是显示,所以你需要一次性计算好,再画出来, 画之前, 1.判断是否在屏幕上,不在屏幕上就不需要画了 2.判断两点是否重叠,重叠就不需要画了
  • 打赏
  • 举报
回复
2D绘图那点东西,90年代中后期的显卡都硬件实现了。
ForestDB 2016-12-28
  • 打赏
  • 举报
回复
可以去看看GDI的历史。 画直线(长度为10)为例,本质上的确是画10个点,但是画的细节是不一样的。 你反复调用drawPoint,这里的开销主要在函数调用的开销,因为drawPoint你反复调用了10次; 但调用drawLine,只调用了一次;其次drawLine的内部,根据硬件的支持程度,又有不同的实现方式: 比如硬件完全不支持“画线”原语,那么它一点一点的画; 如果硬件支持“画线”原语,那么它调用该原语; 如果硬件支持图形加速,那么它有可能一次画10个点(并行)。 针对你具体的问题,缩放这个常见的问题相信已经有很多图形/图像库都封装好了,尝试在这些库基础之上结局缩放问题,而不是自己重新造轮子。可以看看GDI,OpenGL,DirectX这些东西。
真相重于对错 2016-12-27
  • 打赏
  • 举报
回复
引用 2 楼 hw824393385 的回复:
[quote=引用 1 楼 倦怠的回复:]你通过gdi当然慢,你试过对显示内存直接写数据吗? windows下很难直接对物理内存写,他一般通过directx,或者opengl
不知道怎么直接对内存写。[/quote] http://www.chinabaike.com/t/30934/2016/0625/5471507.html
Greger_Hu 2016-12-27
  • 打赏
  • 举报
回复
引用 1 楼 倦怠的回复:
你通过gdi当然慢,你试过对显示内存直接写数据吗? windows下很难直接对物理内存写,他一般通过directx,或者opengl
不知道怎么直接对内存写。
真相重于对错 2016-12-27
  • 打赏
  • 举报
回复
你通过gdi当然慢,你试过对显示内存直接写数据吗? windows下很难直接对物理内存写,他一般通过directx,或者opengl

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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