如何在 Magick++ 中编写这些“转换”命令?

How to write these `convert` commands in Magick++?

我决定在我的应用程序中使用 Magick++。我知道我想使用哪些 convert 命令,但我不知道如何将它们翻译成 Magick++ 代码。

我的应用程序应该使用固定的硬编码调色板量化导入图像中的颜色,并带有可选的抖动(F-D、Riemersma、Bayer、Halftone、Random)。然后它将输出传递给稍后的代码。

以下命令可提供我想要的结果。每一个都是独立的,哪个 "gets run" 取决于用户设置的标志。
此外,palette.png 将是在 运行 上生成的图像对象,实际上并不是从文件中读取的。
同样,out.png 将不会导出到文件,而是作为传递给后续代码的另一个 Image 对象。

convert in.png -dither FloydSteinberg -remap palette.png out.png
convert in.png -dither Riemersma -remap palette.png out.png

convert in.png -ordered-dither o2x2,2 -remap palette.png out.png
convert in.png -ordered-dither o2x2,3 -remap palette.png out.png
convert in.png -ordered-dither o2x2,4 -remap palette.png out.png
# etc.

convert in.png -ordered-dither o3x3,2 -remap palette.png out.png
# etc.

convert in.png -ordered-dither o4x4,2 -remap palette.png out.png
# etc.

convert in.png -ordered-dither o8x8,2 -remap palette.png out.png
# etc.

# etc. through all ordered dithers

convert in.png -random-threshold 0x100% -remap palette.png out.png
convert in.png -random-threshold 10x90% -remap palette.png out.png
convert in.png -random-threshold 25x75% -remap palette.png out.png
convert in.png -random-threshold 30x80% -remap palette.png out.png

对于-dither运算符,使用Magick::Image.quantizeDitherMethod()方法。

Magick::Image img("in.png");
img.quantizeDitherMethod(Magick::FloydSteinbergDitherMethod);   

对于-remap运算符,使用Magick::Image.map()方法。

Magick::Image img("in.png");
// ...
Magick::Image remap("palette.png");
img.map(remap, true);

对于-ordered-dither运算符,使用Magick::Image.orderedDither()方法。

Magick::Image img("in.png");
// ...
img.orderedDither("o3x3,2"); 

对于-random-threshold运算符,使用Magick::Image.randomThreshold()方法。

Magick::Image img("in.png");
// ...
img.randomThreshold(0.3 * QuantumRange, 0.8 * QuantumRange);  

结帐 Image.h header file, and other Magick++'s source code files for reference. I believe the documentation / examples 略有过时,但开发者评论很清楚。