将 CLI ImageMagick 转换为 Magick++:阈值和深度
Translate CLI ImageMagick to Magick++: threshold and depth
我正在将代码中的 system
调用转换为 Magick++
,但在转换 threshold
和 depth
.
时遇到了一些问题
原文:
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");
chop
和 crop
的行为符合我的预期,但其余的则不然。 threshold
和 depth
命令分别采用 double
和 size_t
。所以我在那里写的东西似乎行得通。但是,如果启用其中任何一行,结果图像几乎全是白色。
有没有更正确的做法?
Mark Setchell 的评论是正确的。 Maigck::Image.threshold
的参数必须由 QuantumRange 缩放(由 C 宏定义提供)。
temp_img.threshold(QuantumRange * 0.5);
大多数百分比参数都需要这种缩放比例。
我正在将代码中的 system
调用转换为 Magick++
,但在转换 threshold
和 depth
.
原文:
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");
chop
和 crop
的行为符合我的预期,但其余的则不然。 threshold
和 depth
命令分别采用 double
和 size_t
。所以我在那里写的东西似乎行得通。但是,如果启用其中任何一行,结果图像几乎全是白色。
有没有更正确的做法?
Mark Setchell 的评论是正确的。 Maigck::Image.threshold
的参数必须由 QuantumRange 缩放(由 C 宏定义提供)。
temp_img.threshold(QuantumRange * 0.5);
大多数百分比参数都需要这种缩放比例。