如何在 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 略有过时,但开发者评论很清楚。
我决定在我的应用程序中使用 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 略有过时,但开发者评论很清楚。