首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

求高人!怎么提高绘图效率

2012-12-17 
求高人!如何提高绘图效率!本帖最后由 yshkcj601 于 2012-08-26 19:38:19 编辑我现在正做一个绘图量比较大

求高人!如何提高绘图效率!
本帖最后由 yshkcj601 于 2012-08-26 19:38:19 编辑 我现在正做一个绘图量比较大的游戏,因为图片必须使用PNG(游戏图像数太多,用bmp就太浪费了),所以本菜鸟使用了GDI+。
之前做的应用程序用GDI+绘图,效率我还是挺满意的,因为没感觉有啥影响。
但是现在用GDI+来绘制游戏,明显力不从心,即便用了双缓冲,FPS也只能达到10左右。
这样的绘图效率太坑爹啦,现在想高人顺便告诉我下,一般用DirectX能提高多少效率?
我是菜鸟,求高人指点啦!真的很着急,郁闷了好久了。

贴下我的OnPaint代码
void OnPaint()
{
UINT nWidth=800;
UINT nHeight=600;

hDC=GetDC(hWnd);

HDC memDC=CreateCompatibleDC(hDC);
HBITMAP memHBitmap=CreateCompatibleBitmap(hDC,nWidth,nHeight);
SelectObject(memDC,memHBitmap);

Bitmap memBitmap(nWidth,nHeight);
Graphics memGr(&memBitmap);

POINT pt;
GetCursorPos(&pt);
ScreenToClient(hWnd,&pt);

//绘制背景
memGr.FillRectangle(&SolidBrush(Color(255,232,233,235)),0,0,nWidth,nHeight);

//绘制标题栏
RECT rect;
rect.left=0;
rect.top=0;
rect.right=imgTitle->GetWidth();
rect.bottom=imgTitle->GetHeight();
if (PtInRect(&rect,pt))
{
memGr.DrawImage(imgTitle,0,0,rect.right,rect.bottom);
bTitleVisible=true;
}
else
bTitleVisible=false;
//绘制底部
memGr.DrawImage(imgBottom,0,nHeight-imgBottom->GetHeight(),imgBottom->GetWidth(),imgBottom->GetHeight());
 
//绘制菜单按钮
DrawButton(memGr,pt);

//绘制光标
memGr.DrawImage(cursor.CurrentDisplay,pt.x,pt.y,cursor.Normal->GetWidth(),cursor.Normal->GetHeight());

//贴图
Graphics gr(memDC);
        gr.DrawImage(&memBitmap,0,0);

BitBlt(hDC,0,0,800,600,memDC,0,0,SRCCOPY);

DeleteObject(memHBitmap);
ReleaseDC(hWnd,hDC);
DeleteDC(memDC);
}
[最优解释]
建议别用GDI+,别说做游戏了,一般图像图像应用都尽量不用。
游戏就是DirectX。
[其他解释]
GDI+来绘制游戏,要看是什么类型的游戏。

楼主还是要占用专门的游戏图像引擎才行。DirectX Draw绘制2D效果还是非常不错的。关键它能直接读写显存。硬要说效率的话,我只能说完爆GDI+.
[其他解释]
To 1楼,
我打心里也是希望使用DirectX的,但是我看别人也是用GDI+,绘图一样是非常快的(也是用GDI+)。而DirectX我没怎么接触,所以很好奇他们是怎么利用GDI+到底高效率的,特来这里“取经”了。
[其他解释]
这帖子你修改过啦?前面不是这个样子的。我重新看看啊
[其他解释]
你这OnPaint也太复杂了吧。
可以修改的地方发我列举下
1.memDC和memHBitmap这种都固定用的,放到全局里面,在初始化的时候加载一遍就可以了。
你OnPaint每次建立,加载,初始化,给机器负担太大了

2.memGr也可以放全局,每次初始化都浪费机器资源

3.OnPaint里面只放你每次要变换的逻辑内容,因为主要就是修改内存CDC嘛。

楼主根据的我思路修改下。显示效率可以提升2倍
[其他解释]
先存在内存,动态过程只绘,不再考虑解压等过程.

热点排行