Утечка памяти Magick в алгоритме компоновки

#c #memory #imagemagick #magick

#c #память #imagemagick #magick

Вопрос:

У меня есть программа, которая эмулирует фоновый переход Windows 10 в Linux. Первоначально я выполнял это с помощью System() вызова команды ImageMagick 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,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 цикла для получения всех необходимых шагов перехода.

Общая цель приведенного выше алгоритма заключается в следующем:

  1. Читать в новом фоновом изображении
  2. Читать в старом фоновом изображении
  3. Создайте маску для нового изображения
  4. Создайте перевернутую маску для старого изображения
  5. Примените соответствующие маски к соответствующим изображениям в качестве альфа-канала
  6. Объедините оба замаскированных изображения вместе
  7. Записать результирующее составное изображение в файл для последующего использования в программе

Я не совсем уверен, что вызывает утечку памяти, поскольку я явно использую = оператор для каждого изображения, что, я думаю, предотвратит утечку, поскольку, насколько я могу судить, ничего не добавляется постоянно.

Встроенная composite -blend функция ImageMagick вообще не изменяет использование памяти, поэтому кажется, что это мой алгоритм каким-то образом.

Комментарии:

1. Какова структура class Image?

2. @srt1104 Что именно вы имеете в виду? Насколько я понимаю, pt — это объект, который определяется библиотекой Magick .