将 CLI ImageMagick 转换为 Magick++:阈值和深度

Translate CLI ImageMagick to Magick++: threshold and depth

我正在将代码中的 system 调用转换为 Magick++,但在转换 thresholddepth.

时遇到了一些问题

原文:

convert /foo/bar.ppm -crop WxH+X+Y -threshold 50% -depth 1 /foo/out.ppm

我当前的 C++ 版本是:

Magick::InitializeMagick(*argv);
Magick::Image img;
img.read("/foo/bar.ppm");
Magick::Image temp_img(img);
temp_img.chop(Magick::Geometry(X,Y);
temp_img.crop(Magick::Geometry(W,H));
temp_img.threshold(.50);
temp_img.depth(1);
temp_img.write("/foo/out.ppm");

chopcrop 的行为符合我的预期,但其余的则不然。 thresholddepth 命令分别采用 doublesize_t。所以我在那里写的东西似乎行得通。但是,如果启用其中任何一行,结果图像几乎全是白色。

有没有更正确的做法?

Mark Setchell 的评论是正确的。 Maigck::Image.threshold 的参数必须由 QuantumRange 缩放(由 C 宏定义提供)。

temp_img.threshold(QuantumRange * 0.5);

大多数百分比参数都需要这种缩放比例。