使用Magick ++获取像素颜色?

gho*_*nsd 8 c++ imagemagick magick++

我已经问过这个问题,但那是关于FreeImage.现在我正在尝试做同样的事情ImageMagick(更正确,有Magick++).

我需要的是获得图像中像素的RGB值,并能够将其打印到屏幕上.我在ImageMagick论坛上问了这个,但似乎没有人在那里.:-(有人可以帮帮忙吗?

Sga*_*Sga 13

版本6 API

给定" Image "对象,您必须请求" 像素缓存 ",然后使用它.文档在这里这里:

// load an image
Magick::Image image("test.jpg");
int w = image.columns();
int h = image.rows();

// get a "pixel cache" for the entire image
Magick::PixelPacket *pixels = image.getPixels(0, 0, w, h);

// now you can access single pixels like a vector
int row = 0;
int column = 0;
Magick::Color color = pixels[w * row + column];

// if you make changes, don't forget to save them to the underlying image
pixels[0] = Magick::Color(255, 0, 0);
image.syncPixels();

// ...and maybe write the image to file.
image.write("test_modified.jpg");
Run Code Online (Sandbox Code Playgroud)

版本7 API

在版本7中,对像素的访问已更改(请参阅:移植),但仍然存在低级访问:

MagickCore::Quantum *pixels = image.getPixels(0, 0, w, h);

int row = 0;
int column = 0;
unsigned offset = image.channels() * (w * row + column);
pixels[offset + 0] = 255; // red
pixels[offset + 1] = 0;   // green
pixels[offset + 2] = 0;   // blue
Run Code Online (Sandbox Code Playgroud)

  • 注意量子大小,它可能被配置为 16 位 (2认同)