バージョン6 API
「画像」オブジェクトを考えると、あなたはそれで動作し、「ピクセル・キャッシュ」を要求する必要があります。ドキュメントがありますhereとhere:
// 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");
バージョン7 API
バージョン7ではピクセルへのアクセスが変更されましたが(porting参照)、低レベルのアクセスはまだ存在します:
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
出典
2012-03-06 11:49:54
Sga