| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1608 人关注过本帖
标题:gdiplus绘制占用cpu的问题
只看楼主 加入收藏
xyzdwf
Rank: 2
等 级:论坛游民
威 望:1
帖 子:52
专家分:10
注 册:2017-1-9
结帖率:88.89%
收藏
 问题点数:0 回复次数:1 
gdiplus绘制占用cpu的问题
最近用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为系统下运行
gdiplustest.zip (118.51 KB)

搜索更多相关主题的帖子: graphics HWND cpu bitmap 绘制 
2021-09-10 12:07
xyzdwf
Rank: 2
等 级:论坛游民
威 望:1
帖 子:52
专家分:10
注 册:2017-1-9
收藏
得分:0 
自己试了好多方式,也没找到好的解决办法,用上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
gdiptest.zip (241.71 KB)


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

2021-09-14 19:19
快速回复:gdiplus绘制占用cpu的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019048 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved