我正在尝试将 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);
现在这个结果让我感到困惑。图像是半透明的,但原来透明的背景现在是洋红色。
我不被允许发布图像,以显示结果。:(