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 版本。