Magick ++合成算法中的内存泄漏

问题描述

我有一个程序可以在Linux中模拟Windows 10背景渐变。最初,我是通过对ImageMagick System()命令的composite -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,Color("#"+invertHex(color)+invertHex(color)+invertHex(color)));

                A.composite(maskA,Magick::copyAlphaCompositeOp);
                B.composite(maskB,Magick::copyAlphaCompositeOp);

                compResult=A;
                compResult.composite(B,Magick::BlendCompositeOp);
                compResult.write((picpath+".cache/transition"+to_string((int)i)+".jpg").c_str());

这在for循环中,以获取所有必要的过渡步骤。

上述算法的通用目的如下:

  1. 读入新的背景图片
  2. 读入旧背景图片
  3. 为新图像创建遮罩
  4. 为旧图像创建倒置蒙版
  5. 将各自的蒙版作为alpha通道应用于各自的图像
  6. 将两个蒙版图像一起合成
  7. 生成的合成图像写入文件以供以后在程序中使用

我不太确定是什么导致了内存泄漏,因为我为每个图像都明确地使用了=运算符,我认为这样做可以防止泄漏,因为据我所知,什么也没得到不断添加到。

内置的composite -blend ImageMagick函数根本不会改变内存使用率,因此似乎某种程度上是我的算法。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)