#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
цикла для получения всех необходимых шагов перехода.
Общая цель приведенного выше алгоритма заключается в следующем:
- Читать в новом фоновом изображении
- Читать в старом фоновом изображении
- Создайте маску для нового изображения
- Создайте перевернутую маску для старого изображения
- Примените соответствующие маски к соответствующим изображениям в качестве альфа-канала
- Объедините оба замаскированных изображения вместе
- Записать результирующее составное изображение в файл для последующего использования в программе
Я не совсем уверен, что вызывает утечку памяти, поскольку я явно использую =
оператор для каждого изображения, что, я думаю, предотвратит утечку, поскольку, насколько я могу судить, ничего не добавляется постоянно.
Встроенная composite -blend
функция ImageMagick вообще не изменяет использование памяти, поэтому кажется, что это мой алгоритм каким-то образом.
Комментарии:
1. Какова структура class Image?
2. @srt1104 Что именно вы имеете в виду? Насколько я понимаю, pt — это объект, который определяется библиотекой Magick .