создать затененную иконку с помощью magick ++ (ImageMagick) - PullRequest
1 голос
/ 14 января 2011

Я пытаюсь использовать 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);

Теперь результат этого смущает меня.Изображение полупрозрачно, но фон, который изначально был прозрачным, теперь пурпурный.

Мне не разрешили опубликовать изображения, чтобы показать результат.(

...