c++ - Magick++ 合成算法中的内存泄漏
问题描述
我有一个程序可以在 Linux 中模拟 Windows 10 背景渐变过渡。最初我是通过System()
调用 ImageMagickcomposite -blend
命令来完成此操作的,但是为了消除System()
调用,我编写了以下函数来模拟 ImageMagick 命令:
A=Image(newpic);
B=Image(picpath+".cache/resizeOld"+to_string(S)+".jpg");
if(i<=steps)
{
stream<<std::hex<<int(i*(255/steps));
streambuffer=stream.str();
if(streambuffer.length()==1)
{
streambuffer="0"+streambuffer;
}
color=streambuffer;
streambuffer="";
stream.str("");
}
else
{
color="FF";
}
maskA=Image(Geometry(bgW,bgH),Color("#"+color+color+color));
maskB=Image(Geometry(bgW,bgH),Color("#"+invertHex(color)+invertHex(color)+invertHex(color)));
A.composite(maskA,0,0,Magick::CopyAlphaCompositeOp);
B.composite(maskB,0,0,Magick::CopyAlphaCompositeOp);
compResult=A;
compResult.composite(B,0,0,Magick::BlendCompositeOp);
compResult.write((picpath+".cache/transition"+to_string((int)i)+".jpg").c_str());
这是在一个for
循环中获取所有必要的转换步骤。
上述算法的一般目的如下:
- 读入新的背景图片
- 读入旧背景图像
- 为新图像创建蒙版
- 为旧图像创建一个倒置蒙版
- 将各自的蒙版作为 Alpha 通道应用于各自的图像
- 将两个蒙版图像合成在一起
- 将生成的合成图像写入文件以供以后在程序中使用
我不确定是什么导致了内存泄漏,因为我明确地=
为每个图像使用了一个运算符,我认为这可以防止泄漏,因为据我所知,没有任何东西会不断添加。
内置的composite -blend
ImageMagick 函数根本不会改变内存使用情况,所以它似乎是我的算法。
解决方案
推荐阅读
- r - 使用 R 中的模拟来测试置信区间的覆盖概率
- xml - 通过 Scala/Spark 使用 Apache Ignite xml 时为 CassandraAdminCredentials 查找类路径时出错
- keras - fchollet 5.4-visualizing-what-convnets-learn input_13:0 is fed and fetched 错误
- c# - 如何制作菜单以绑定键
- excel - 扫描#时如何自动返回原始列但下一行
- javascript - 如何防止上传按钮选择特定大小和类型的文件?
- android - 在 Android Kotlin 中使用 Algolia 进行地理搜索
- dji-sdk - 如何获得 Matrice 600 (PRO) A3 的快门信号?
- javascript - es6 Array Reduce 函数和字符串拆分用法
- dns - DNS 问题 - 找不到服务器 IP 地址