Graphicsmagick图像是否正常保存?

时间:2015-07-30 01:37:15

标签: c graphicsmagick

我遇到了GraphicsMagick的问题。我重新排列图像中的像素并尝试保存它,但生成的图像始终是相同的。如何在保存之前更新图像? 这是我的代码:

PixelPacket *write_pixels = SetImagePixelsEx(
    image,
    0, // x
    0, // y
    w, // columns
    h, // rows
    &exception
);
for (int y = 0; y < h; y++) {
    printf("%hhu -> ", write_pixels[y * w].red);
    printf("%hhu -> ", pixels[y][0].red);
    for (int x = 0; x < w; x++) {
        write_pixels[x + y * w] = pixels[y][x];
    }
    printf("%hhu\n", write_pixels[y * w].red);
}
SyncImagePixelsEx(image, &exception);    

strcpy(image->filename, outfile);
if (!WriteImage(imageInfo, image)) {
    CatchException(&image->exception);
    return 1;
}

我打印一些输出以确保它正常工作。以下是一些输出:

81 -> 64 -> 64
68 -> 65 -> 65
84 -> 66 -> 66
80 -> 67 -> 67
64 -> 68 -> 68
93 -> 69 -> 69
86 -> 70 -> 70
91 -> 71 -> 71
107 -> 72 -> 72
85 -> 73 -> 73
111 -> 74 -> 74
102 -> 75 -> 75

所以我知道像素正在改变。并且docs说我需要更新像素的是SyncImagePixelsEx(),我使用了它。保存时为什么不更新图像?

我已检查过所有内容,但每次保存到新文件名的图像看起来都与原始图像完全相同。

1 个答案:

答案 0 :(得分:0)

经过几个小时的挫折,我终于遇到了一个解决方案。使用像素数据创建新图像有效:

Image *new_image;
new_image = ConstituteImage(
    image->columns, // width
    image->rows, // height
    "RGBO", // order of pixel array
    CharPixel, // type
    write_pixels, // pixels
    &exception
);

strcpy(new_image->filename, outfile);
if (!WriteImage(image_info, new_image)) {
    CatchException(&new_image->exception);
    return 1;
}