zoukankan      html  css  js  c++  java
  • DirectDraw、GdiPlus 和 GDI 的效率比较

    最近因为工作需要大量的绘制图形,为了提高效率,特提出以下设想:

    考虑使用 IDirectDraw7 IDirectDrawSurface7 作为绘图背景,其中

    1、使用主表面和后背表面,后背表面用来合成图片,主表面仅用来显示图片

    2、背景图使用一个单独的表面进行绘制,设置透明色,或者背景填充为地图的底色

    3、设备图层使用一个单独的表面进行绘制,设置透明色(SetColorKey);

    4、绘图操作可以使用 GDI+ ,通过 Graphics 挂接绘图表面的 HDC

     

    当主表面需要绘制时:

    1、初始化背景表面的背景色为地图的底色;

    2、将背景表面叠加到后背表面上;

    3、将设备表面叠加到后背表面上;

    4、翻转后背表面到主表面上;

    当然首先第一步就是做一个简单的程序测试效率,结果大出我的意料之外,测试结果如下:
    1、使用 GDI+ (没有启动窗口模式的 DirectDraw) , 绘制一万次四个点的折线平均耗时:2740 毫秒
    2、使用 GDI   (没有启动窗口模式的 DirectDraw) ,绘制一万次四个点的折线平均耗时:265 毫秒
    3、使用 GDI+ (启动窗口模式的 DirectDraw) ,绘制一万次四个点的折线平均耗时:6957 毫秒
    4、使用 GDI   (启动窗口模式的 DirectDraw) ,绘制一万次四个点的折线平均耗时:234 毫秒
    怎么使用 GDI+ 比使用 GDI 的效率差这么多,并且使用窗口模式 DirectDraw (非全屏模式)对 GDI 的效率提高不大,但是对 GDI 的效率则是一个很大的影响;这让人实在是想不明白,最终不得不放弃了这个想法,只好使用最原始的作法:使用 GDI 函数在窗口的 DC 上进行绘图;下面是测试的代码:

    测试代码片段
  • 相关阅读:
    [SDOI2015]星际战争
    [SDOI2016]生成魔咒
    hdu3311
    [ZJOI2011]最小割
    P3331 [ZJOI2011]礼物(GIFT)
    [ZJOI2010]贪吃的老鼠
    状压dp-----三进制
    noip2016 天天爱跑步
    概率期望dp
    poj2186
  • 原文地址:https://www.cnblogs.com/WonKerr/p/GDI_GDIPLUS_DDRAW.html
Copyright © 2011-2022 走看看