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
ImageMagick: DrawImage(Image*,DrawInfo*) 绘制填充图片时卡住的原因分析的更多相关文章
- 使用MFC CImage类绘制PNG图片时遇到的问题
为了测试CImage绘制PNG图片的效果,我们用截图软件截得一张360的界面,然后使用PhotoShop等工具在图片的周边加上了透明的区域,然后保存成PNG图片文件.CImage首先从文件中加载,即 ...
- Flex 绘制圆形并填充图片
注意:Ellipse 绘制椭圆,当width = height 时 则绘制圆形. BitmapFill:填充图片 <s:Group id="gpimgUser" width= ...
- Libgdx 循环绘制图片时间隔的问题
在libgdx中使用循环绘制一张图片铺满某个区域时,有可能会遇到像素计算没有问题时,图块中间还是有约1像素的间隔,或者是本来没有间隔,做了缩放处理之后发现中间有间隔. 解法 当使用Texture加载图 ...
- GDI+ 填充背景时,非常多时候不起作用,GDI、GDI+配合运用
在ONDRAW中运行GDI+ 填充背景时,不起作用,不知道什么原因 [cpp] view plaincopy Graphics graphics(pDC->GetSafeHdc()); Bitm ...
- 使用IMAGEMAGICK的CONVERT工具批量转换图片格式
使用IMAGEMAGICK的CONVERT工具批量转换图片格式 http://www.qiansw.com/linux-imagemagick-convert-img.html Home > 文 ...
- Matlab绘图基础——其他三维图形(绘制填充的五角星)
其他三维图形 %绘制魔方阵的三维条形图 subplot(2,2,1); bar3(magic(4)); %以三维杆图形式绘制曲线y=2sin(x) subplot(2,2,2); y=2*sin( ...
- Android Developers:绘制9-patch图片
绘制9-patch图片工具让你使用可见即可得(WYSIWYG)编辑器轻松创建Nine Patch图像. 关于介绍Nine-path图片和它是如何工作的,请在2D Graphics的文档中查阅关于Nin ...
- C#如何消除绘制图形缩放时抖动,总结
一.手动双缓冲 首先定义一个BitmapBitmap backBuffer = new Bitmap(画布宽度, 画布高度);然后获取这个Bitmap的GraphicsGraphics graphic ...
- Android View加载圆形图片且同时绘制圆形图片的外部边缘边线及边框:LayerDrawable实现
Android View加载圆形图片且同时绘制圆形图片的外部边缘边线及边框:LayerDrawable实现 LayerDrawable实现的结果和附录文章1,2,3中的layer-list一致. ...
随机推荐
- python爬虫scrapy之如何同时执行多个scrapy爬行任务
背景: 刚开始学习scrapy爬虫框架的时候,就在想如果我在服务器上执行一个爬虫任务的话,还说的过去.但是我不能每个爬虫任务就新建一个项目吧.例如我建立了一个知乎的爬行任务,但是我在这个爬行任务中,写 ...
- DBX error:Driver could not be properly initialized .... 解决办法
系统: win7 64位+ MySql 将libmysql.dll和Dbxmys.dll 拷到 C:\Windows\SysWOW64 目录. ( 64位系统) 32位则拷到 c:\wind ...
- 14.statefulset服务
有状态的控制器有以下几个特点 稳定,独特的网络标识符. 稳定,持久的存储. 有序,优雅的部署和扩展. 有序的自动滚动更新. 使用限制 StatefulSet是1.9之前的beta资源,在1.5之前的任 ...
- SOJ 1685:chopsticks(dp)
题目链接 说实话挺喜欢soj的界面,简简单单,没有多余的东西hhh(但是简单到连内存限制,时间限制都看不到了. 题意是有个“奇葩”的主人公,吃饭要用三根筷子.两根短的一根长的. 现在给你n根筷子,要在 ...
- 搭建Hexo博客(一)-创建Hexo环境
Hexo配合github,可以创建自己的博客.基本原理是使用Hexo生成静态页面,发布到github上.在本地需要搭建Hexo环境. 1.安装nodejs 下载并安装NodeJS,官网地址:https ...
- Nginx 决策浏览器缓存是否有效
expires指令是告诉浏览器过期时间 syntax:expires [modified] time; eopch | max | off; default : off context :http,s ...
- winserver 2008 R2服务器安装IIS
winserver 2008 R2 IIS7 安装IIS 打开服务器管理器 选择“角色”,右击添加角色 点击“下一步” 勾选”Web服务器(IIS)“,点击”下一步“ 勾选”常见Http功能.应用程序 ...
- SPOJ QTREE-Query on a tree-树链剖分-边权
用每个点代表父节点到此点的边.建立一一映射后就可以用点权的方法处理了. 注意的是路径两端节点的处理 #include <cstdio> #include <algorithm> ...
- CrawlSpider爬取拉钩
CrawlSpider继承Spider,提供了强大的爬取规则(Rule)供使用 填充custom_settings,浏览器中的请求头 from datetime import datetime imp ...
- robotframework测试用例加入注释
*** Variables ***${HOST} 192.168.132.135${USER} username*** Test Cases ***Simple [Documentation] Sim ...