我正在尝试将一个简单的 ImageMagick 命令行转换为 Magick++/c++ 代码。但是它没有按预期工作。官网缺少API示例。即使深入研究相关的实现代码,我也无法找出问题所在。谷歌没有给出任何提示。
ImageMagick 命令:
convert -size 543x114 xc: -sparse-color Barycentric '0,0 red 0,%h blue' gradient.png
我想通过下面的代码复制它的效果,但是输出不一致
Magick++代码:
#include <Magick++.h>
int main()
{
int width = 543;
int height = 114;
Magick::Image gradImage(Magick::Geometry(width, height), Magick::Color("white"));
// installed magick++ is built --with-quantum-depth=8
double maxRGB = 255;
double args[] = {
0, 0,
maxRGB, 0, 0,
0, height,
0, 0, maxRGB
};
gradImage.sparseColor(
(Magick::ChannelType)((Magick::DefaultChannels & ~Magick::OpacityChannel) & ~Magick::IndexChannel),
Magick::BarycentricColorInterpolate,
sizeof(args) / sizeof(double),
args
);
gradImage.write("gradient.png");
}
CMakelist.txt:
cmake_minimum_required(VERSION 3.16)
project(demo)
find_package(ImageMagick COMPONENTS Magick++)
include_directories(
${ImageMagick_INCLUDE_DIRS}
)
add_executable(
demo
main.cpp
)
target_link_libraries(
demo
${ImageMagick_Magick++_LIBRARY}
)
其他信息:
感谢任何帮助!
我希望 magick++ 代码与命令行具有相同的效果
GenerateCoefficients
阅读预期的参数,以及 SparseColorOption
查看 CLI 选项是如何解析的。
R, G, B
值应在 0.0
和 1.0
之间的范围内。DefaultChannels
.尝试以下...
#include <Magick++.h>
int main(int argc, char **argv)
{
double
width = 543.0,
height = 114.0;
Magick::InitializeMagick(*argv);
Magick::Geometry rect((int)width, (int)height);
Magick::Image gradImage(rect, Magick::Color("white"));
Magick::ColorRGB color1("red");
Magick::ColorRGB color2("blue");
double args[15] = {
0, 0, color1.red(), color1.green(), color1.blue(),
width, 0, color1.red(), color1.green(), color1.blue(),
0, height, color2.red(), color2.green(), color2.blue()
};
gradImage.sparseColor(
Magick::DefaultChannels,
Magick::BarycentricColorInterpolate,
15,
args
);
gradImage.write("gradient.png");
}
别忘了先打电话给
!Magick::InitializeMagick()