1

我正在尝试将 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);

现在这个结果让我感到困惑。图像是半透明的,但原来透明的背景现在是洋红色。

我不被允许发布图像,以显示结果。:(

4

0 回答 0