注册 登录
编程论坛 C图形专区

gdiplus绘制占用cpu的问题

xyzdwf 发布于 2021-09-10 12:07, 1496 次点击
最近用gdiplus绘制gui,滚动条滚动和鼠标频繁hover时发现cpu占用会升高很多,以为是事件传播低效的问题,但如果注释掉最后的绘制,事件传播几乎不消耗cpu,任务管理器中一直是0,加上绘制就占用比较高
下面是我绘制的代码,是网络上找的双缓冲绘制,自己的图形绘制是在gui_context_draw中进行,论坛里的高手帮我看看有没有问题
程序代码:

void gui_gdiplus_paint(gui_gdiplus_context_p context, HWND hwnd, HDC hdc)
{
    RECT rect;
    GpBitmap* bitmap;
    GpGraphics* hdcgraphic;
   
    GetClientRect (hwnd, &rect);
    GdipCreateFromHDC(context->hdc, &hdcgraphic);
    GdipCreateBitmapFromGraphics(rect.right, rect.bottom, hdcgraphic, &bitmap);
   
    GdipGetImageGraphicsContext(bitmap, &context->graphics);
//    GdipSetTextRenderingHint(context->graphics, 3);
//    GdipSetSmoothingMode(context->graphics, SmoothingModeAntiAlias);
   
    gui_context_draw(context->ctx);
   
    GdipDrawImageI(hdcgraphic, bitmap, 0, 0);
   
    GdipDisposeImage(bitmap);
    GdipDeleteGraphics(hdcgraphic);
    GdipDeleteGraphics(context->graphics);
}

以下是打的32位exe,不知道能不能在64为系统下运行
只有本站会员才能查看附件,请 登录

1 回复
#2
xyzdwf2021-09-14 19:19
自己试了好多方式,也没找到好的解决办法,用上CachedBitmap也然并卵,除了多占了点内存,cpu占用依旧
程序代码:

//用上CachedBitmap
void gui_gdiplus_paint(gui_gdiplus_context_p context, HWND hwnd, HDC hdc)
{
    GpCachedBitmap* cache;
    GpBitmap* bitmap;
    GpGraphics* hdcgraphic;
   
    GdipCreateFromHDC(hdc, &hdcgraphic);
    GdipCreateBitmapFromGraphics(context->ctx->width, context->ctx->height, hdcgraphic, &bitmap);
    GdipGetImageGraphicsContext(bitmap, &context->graphics);

    gui_context_draw(context->ctx);
   
    GdipCreateCachedBitmap(bitmap, hdcgraphic, &cache);
    GdipDrawCachedBitmap(hdcgraphic, cache, 0, 0);

    GdipDeleteCachedBitmap(cache);
    GdipDeleteGraphics(context->graphics);
    GdipDisposeImage(bitmap);
    GdipDeleteGraphics(hdcgraphic);
}

只有本站会员才能查看附件,请 登录


还是直接绘制, 不用双缓冲占用cpu很低,但是滚动的时候能闪瞎眼睛
程序代码:

//不用缓冲直接绘制
void gui_gdiplus_paint(gui_gdiplus_context_p context, HWND hwnd, HDC hdc)
{
    GdipCreateFromHDC(hdc, &context->graphics);

    gui_context_draw(context->ctx);
   
    GdipDeleteGraphics(context->graphics);
}

只有本站会员才能查看附件,请 登录

以下是打的32位exe
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2021-9-14 19:28编辑过]

1