Я пытаюсь использовать ImageMagick для простой задачи.Я хочу создать затемненную версию изображения / значка во время выполнения в приложении.Я использую магию ++ c плюс api.
Я нашел несколько команд, которые дают мне хороший результат при запуске из командной строки.Преобразование команд в API c ++ было немного сложным, и тогда результат был не таким, как хотелось бы.
// Command example
convert -size 32x32 xc:"#999999" gray32.png
composite -dissolve 50% logo32.png gray32.png dim_logo32.png
Как бы это выглядело в c ++?Я придумал это.
Magick::Image gray;
gray.size( Magick::Geometry(image.columns(), image.rows()));
gray.read( "xc:#999999");
gray.label( "gray" );
if(gray.isValid()) {
gray.opacity(QuantumRange/2);
image.composite(gray, Magick::Geometry(image.columns(),image.rows()), Magick::DissolveCompositeOp );
Но прозрачность на картинке потеряна.
Еще одно предложение для создания затемненного изображения - сделать полупрозрачным полное изображение.
convert input.png -channel Alpha -evaluate Set 50% output.png
Это может сработать.Прозрачность сохраняется, когда я пытался это из командной строки.Изменение этого в c ++ api меня сильно смутило.
Я закончил с этой единственной строкой.
image.opacity(QuantumRange/ 2);
Теперь результат этого смущает меня.Изображение полупрозрачно, но фон, который изначально был прозрачным, теперь пурпурный.
Мне не разрешили опубликовать изображения, чтобы показать результат.(