zoukankan      html  css  js  c++  java
  • ImageMagick: DrawImage(Image*,DrawInfo*) 绘制填充图片时卡住的原因分析

    今天傍晚在测试的时候无意发现有两个动画会卡住,正常情况下,20秒就完成的操作,突然卡住。

    CPU:95%+,经过30 - 50秒左右后,程序又能正常的向下执行,结果是对的。

    这种情况不是每次都发生,有的时候执行20次,会出现 1 - 2次卡住,但没有完全卡死。

    经过在多段代码之间加多个printf()来打印执行的位置,发现卡住的代码是:DrawImage(mw_frame->images, draw_info);

    下面是相关代码:

    经过测试发现每次卡住的时候,都是在 i == 0的时候,通过分析发现,如果 i == 0,那么绘制的四边框将不存在。

    因为四边框的宽与高都为 0, 可能就是因为这个原因导致 DrawImage() 卡住。

    我将原来的 for(i=0;i<...) 改为 for(i=1;i<) 后,经过多次测试发现不会再卡住了。

    DrawingWand *d_wand = NewDrawingWand(); //

    //从四周不断的画四边形

    DrawRectangle(d_wand, 0, 0, step * i, step * i); //左上角

    DrawRectangle(d_wand, 0, height, step * i, height - step * i); //左下角

    DrawRectangle(d_wand, width, 0, width - step * i, step * i); //右上角

    DrawRectangle(d_wand, width , height, width - step * i, height - step * i); //右下角

    // Now "peek" at the wand

    DrawInfo *draw_info = PeekDrawingWand(d_wand); //返回当前图形的魔杖信息。

    draw_info->fill_pattern = mw->images; //设置填充图片

    if(mw_frame == NULL)

    {

        //如果 mw_pre 不为空, 就使用上一个 mw_pre, 反之就新建一个新画布

        mw_frame = mw_pre ? mw_pre : imgNewCanvas(width, height, "#000000");

    }

    DrawImage(mw_frame->images, draw_info); //绘制图片, 在这里有的时候会卡住,频率在: 10%左右

    2014-09-14

  • 相关阅读:
    线程的创建和运行
    Spring SpringMvc Mybatis Maven整合
    使用 Redis 缓存来实现用户最近浏览的商品列表
    Java泛型
    HDFS的HA集群原理分析
    MapReduce-自动化运行配置
    大数据-HDFS 集群搭建的配置文件
    鼠标线状移动特效
    Mac 终端 Tomcat 环境配置过程
    oracle列转行
  • 原文地址:https://www.cnblogs.com/personnel/p/4585059.html
Copyright © 2011-2022 走看看