我正在尝试将ImageMagick用于我认为简单的任务。 我想在运行时在应用程序中生成图像/图标的暗淡版本。 我使用magick ++ c plus api。
我从命令行运行时发现一些命令可以给我一个正常的结果。 将命令转换为c ++ api有点挑战性,结果不如预期。
// 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);
现在这个结果让我感到困惑。图像是半透明的,但最初透明的背景现在是洋红色。
我不允许发布图片,以显示结果。 :(