首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化GDI+绘图?

优化GDI+绘图?
EN

Stack Overflow用户
提问于 2010-05-02 00:57:44
回答 2查看 1.6K关注 0票数 0

我正在使用C++和GDI+,我将制作一个矢量绘图应用程序,并希望使用GDI+进行绘图。

我创建了一个简单的测试来熟悉它:

代码语言:javascript
复制
case WM_PAINT:
        GetCursorPos(&mouse);
        GetClientRect(hWnd,&rct);

        hdc = BeginPaint(hWnd, &ps);
        MemDC = CreateCompatibleDC(hdc);
        bmp = CreateCompatibleBitmap(hdc, 600, 600);
        SelectObject(MemDC,bmp);
        g = new Graphics(MemDC);

        for(int i = 0; i < 1; ++i)
        {
            SolidBrush sb(Color(255,255,255));
            g->FillRectangle(&sb,rct.top,rct.left,rct.right,rct.bottom);
        }

        for(int i = 0; i < 250; ++i)
        {
            pts[0].X = 0;
            pts[0].Y = 0;

            pts[1].X = 10 + mouse.x * i;
            pts[1].Y = 0 + mouse.y * i;

            pts[2].X = 10 * i + mouse.x;
            pts[2].Y = 10 + mouse.y * i;

            pts[3].X = 0 + mouse.x;
            pts[3].Y = (rand() % 600) + mouse.y;

            Point p1, p2;
            p1.X = 0;
            p1.Y = 0;
            p2.X = 300;
            p2.Y = 300;

            g->FillPolygon(&b,pts,4);
        }


        BitBlt(hdc,0,0,900,900,MemDC,0,0,SRCCOPY);

        EndPaint(hWnd, &ps);

        DeleteObject(bmp);
        g->ReleaseHDC(MemDC);
        DeleteDC(MemDC);
        delete g;
        break;

我想知道我做得是否正确,或者我是否有一些区域正在杀死cpu。因为现在它需要大约1秒的时间来渲染,我希望能够让它快速地重新绘制。谢谢

在真实的情况下,找出要重画的屏幕部分,然后只重画有此界限的元素,会不会更好?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-15 13:20:39

您可以尝试将其卸载到应用程序设置和清理过程中,而不是创建所有资源并为每个WM_PAINT拆卸它们。换句话说,将CreateCompatibleDC、CreateCompatibleBitmap等所有内容转移到WM_CREATE,并将相应的deletes转移到WM_DESTROY。您可以将对所有设备上下文、笔刷句柄等的引用保留为类属性或静态变量。这样,到了WM_PAINT的时候,所有的设置都已经完成了,您只需要处理实际的绘图。

票数 0
EN

Stack Overflow用户

发布于 2010-05-02 01:33:20

目前代码中最慢的一行可能是BitBlt(hdc,0,0,900,900,MemDC,0,0,SRCCOPY);。Blit函数在CPU上通常是非常慢和困难的。使用图形处理器会更快,但涉及更多(如果它甚至可以与GDI+捆绑在一起)。尝试找到一种方法来绘制到你最终将使用的表面,而不是逐个像素地复制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2750778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档