ImageMagick C++ 版本 7 修改空白图像中的像素值
ImageMagick C++ Version 7 Modify Pixel Value in Blank Image
我有以下代码创建一个空白的黑色图像,然后尝试通过将每个像素修改为红色来写入该图像。
Magick::Image image(Magick::Geometry(1024, 1024),
Magick::Color(std::uint8_t(0), std::uint8_t(0), std::uint8_t(0)));
assert(image.channels() == 3 && "Created wrong image format.");
image.type(Magick::TrueColorType);
image.fillColor("black");
std::size_t w = image.columns();
std::size_t h = image.rows();
assert(image.columns() == 1024 && image.rows() == 1024);
Magick::Quantum *mpixels = image.setPixels(0, 0, w, h);
for (int row = 0; row < h - 1; ++row) {
for (int col = 0; col < w - 1; ++col) {
std::size_t offset = (w * row + col);
std::size_t moffset = image.channels() * offset;
mpixels[moffset + 0] = 255;
mpixels[moffset + 1] = 0;
mpixels[moffset + 2] = 0;
}
}
image.syncPixels();
image.write(out.c_str());
但是,在检查图像后,更改像素值后它仍然全黑。我需要更改什么才能修改像素值?
我怀疑您使用的是 Q16 版本的 ImageMagick,这意味着每个像素通道值都在 0-65535
范围内,并且您对红色通道使用的 255
非常接近变黑。我认为以下内容可以解决您的问题:
mpixels[moffset + 0] = 65535;
如果 0-255
范围内的频道对您来说足够了,您也可以决定切换到 ImageMagick 的 Q8 版本。
我有以下代码创建一个空白的黑色图像,然后尝试通过将每个像素修改为红色来写入该图像。
Magick::Image image(Magick::Geometry(1024, 1024),
Magick::Color(std::uint8_t(0), std::uint8_t(0), std::uint8_t(0)));
assert(image.channels() == 3 && "Created wrong image format.");
image.type(Magick::TrueColorType);
image.fillColor("black");
std::size_t w = image.columns();
std::size_t h = image.rows();
assert(image.columns() == 1024 && image.rows() == 1024);
Magick::Quantum *mpixels = image.setPixels(0, 0, w, h);
for (int row = 0; row < h - 1; ++row) {
for (int col = 0; col < w - 1; ++col) {
std::size_t offset = (w * row + col);
std::size_t moffset = image.channels() * offset;
mpixels[moffset + 0] = 255;
mpixels[moffset + 1] = 0;
mpixels[moffset + 2] = 0;
}
}
image.syncPixels();
image.write(out.c_str());
但是,在检查图像后,更改像素值后它仍然全黑。我需要更改什么才能修改像素值?
我怀疑您使用的是 Q16 版本的 ImageMagick,这意味着每个像素通道值都在 0-65535
范围内,并且您对红色通道使用的 255
非常接近变黑。我认为以下内容可以解决您的问题:
mpixels[moffset + 0] = 65535;
如果 0-255
范围内的频道对您来说足够了,您也可以决定切换到 ImageMagick 的 Q8 版本。