我想在屏幕上绘制很多的点,但是使用SetPixel()效率好低,有什么方法可以提高效率吗?不使用MFC!

形如:for(inti=0;i<1024;i++){for(intj=0;j<768;j++){SetPixel(hdc,i,j,RGB(0,255,0);}}意在绘制一... 形如:
for( int i = 0; i < 1024; i++)
{
for(int j = 0; j < 768; j++)
{
SetPixel(hdc, i, j, RGB(0, 255, 0);
}
}
意在绘制一张1024*768的绿色屏幕。但是绘制效率太低了,画一次需要3秒左右。
有什么方法可以将绘制效率提高到60Hz左右?
可以使用DirectDraw。
o(∩_∩)o 我的意图不是只想画一个绿色屏幕,而是如何提高这1024*768个点的绘制效率
展开
 我来答
aaa833
2010-10-17 · TA获得超过717个赞
知道小有建树答主
回答量:841
采纳率:0%
帮助的人:644万
展开全部
如果想手动绘制每一个点的话,个人比较推荐用opengl;
绘制点比较占时间主要原因是内存和显卡缓存的交互比较慢;setPixel的原理是每调用一次就把内存数据写到显卡缓存上,这样画一个屏幕就得交换1024*768次。
比较快速的办法是先写好1024*768大小的一个数组,然后把这个数组一次性的写到显卡缓存里面去,这样画一个屏幕就只用交换一次。但是自己处理这个工作稍显麻烦~~所以建议用opengl;当然directx也行,不过个人不喜欢。
匿名用户
推荐于2018-04-12
展开全部
画一个点
然后用
StretchBlt
把一个点放大到整个屏幕即可
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友aa90f8a
2010-10-17
知道答主
回答量:17
采纳率:0%
帮助的人:8.4万
展开全部
如果是一个矩形,可试试
RECT rect = {0, 0, 1024, 768};
::SetBkColor(hDC, RGB(0, 255, 0));
::ExtTextOut(hDC, 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL);

如果是其它可描绘的形状,采用FillPath

当然还可以使用GDI+
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友917c7ea
2010-10-18 · TA获得超过374个赞
知道小有建树答主
回答量:178
采纳率:0%
帮助的人:208万
展开全部
aaa833后面的思路是对的,将其保存为一个数组,用openGL或DirectX都可以。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
星夜落尘
2010-10-17 · TA获得超过594个赞
知道小有建树答主
回答量:466
采纳率:0%
帮助的人:356万
展开全部
建议使用DirectX
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式