c - Graphicsmagick 图像未正确保存?

标签 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()。为什么在我保存图像时不更新图像?

我已经检查了所有内容,但每次以新文件名保存的图像看起来总是与原始图像相同。

最佳答案

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

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;
}

关于c - Graphicsmagick 图像未正确保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31713866/

相关文章:

c - 将 typedef 与实例声明一起使用。维基错误?

c - 替换 switch case 中的 goto

将无符号字符转换为有符号整数

c - 指向 C 中具有不同参数的不同函数的函数指针

javascript - 使用node.js和gm绘制许多图形基元的方法是什么?

graphicsmagick - Unicode drawText "Right to Left"GraphicsMagick 中节点的语言问题

C Socket服务器编程发送文件

Node.js 图形魔术 : check installation & functionality

node.js - 在 Node JS 中使用 gm 模块时,NodeJS 产生 ENOENT 错误

image - 如何使用 GraphicsMagick 从图像中删除背景颜色?