【问题标题】:How to get image data into arrary by ImageMagicK?如何通过 ImageMagicK 将图像数据放入数组?
【发布时间】:2016-01-26 11:30:39
【问题描述】:

我不知道从哪里开始。

我想用数组中的 ImageMagick 读取图像。

此时,没有错误:

My_image.read("c:\\a.jpg");

我想将我已经读取的图像数据放入数组中。
我想使用 ImageMagick 库写入文件。

这是我的代码:

...
master.read("c:\\a.jpg");

Image my_image("640x480", "white"); 
my_image.modifyImage(); 
Pixels my_pixel_cache(my_image); 
PixelPacket* pixels; 
int start_x = 0, start_y = 0,  size_x = 640, size_y = 480; 
*pixels = Color("black");
*(pixels+200) = Color("green");
my_pixel_cache.sync();

...

但我无法获得a.jpg 的数组。如何获取a.jpg图片数据到数组中进行修改?

【问题讨论】:

    标签: c++ visual-studio-2010 image-processing imagemagick


    【解决方案1】:

    你必须初始化你的PixelPacket:

    PixelPacket *pixels = my_image.getPixels(0, 0, 640, 480);
    

    然后您可以使用嵌套循环逐像素修改图像:

    int w = 640;
    for (int y = 0; y != h; ++y)
        for (int x = 0; x != w; ++x)
        {
            pixels[w * y + x].red = 255; // if MAGICKCORE_QUANTUM_DEPTH=8
            pixels[w * y + x].green = 0;
            pixels[w * y + x].blue = 0;
        }
    

    Magick::PixelPacket 是一个struct,其中包含redgreenblue 成员(另外还有一个用于第四频道)。最后,将更改写入磁盘:

    my_image.syncPixels();
    my_image.write("c:\\temp\\output.jpg");
    

    【讨论】:

    • 是这样吗?如果我想修改 a.jpg 那么 pixel[640 * y + x] = Color("a.jpg");?
    • 不,您必须一次修改一个像素,使用两个嵌套的for 循环。请在您的问题中说明您要完成的工作
    • 我有更新,请告诉我是否正确。感谢您提前帮助我
    • 先生,我接受你了。但是你能让我知道这个输出是正确的吗?它看起来像黑色而不是红色。
    • 对我来说很好:i.imgur.com/5V2RWwr.jpg - 也许您正在使用 MAGICKCORE_QUANTUM_DEPTH=16,所以您必须应用红色值 65535 才能看到红色 100%
    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    相关资源
    最近更新 更多