我正在根据我的教授给出的模板编写一个程序来处理图像.PPM。模板具有以下结构:

typedef struct {
unsigned char gray;
} PPMGrayPixel;

typedef struct {
    int x, y;
    PPMGrayPixel *data;
} PPMGrayImage;


我正在尝试将常规.ppm转换为灰度.ppm。实际上,在这种情况下,我已经有一个空的灰度图像,其大小与原始图像相同。该灰度文件只有一个颜色通道(原始通道有三个)。我对要转换的公式还可以,但是我想在尝试访问灰度文件的元素时缺少某些内容。

我不担心设置正确的数字,我只想现在设置黑白的值。我想确保我正在访问正确的像素。

这是我的代码:

PPMGrayImage * ConvertToGrayFromColorImage(PPMImage *img) {

PPMGrayImage *img2;
img2 = CreateEmptyGrayImageFromColorImage(img);


for (int i=0; i < img2->x*img2->y; i++) {

    if (i % 2 == 0) {
        img2.data[i].gray = 0;
    }
    else {
        // sign 1
    }
}


我是否在问题逻辑或sintax中缺少某些东西?

最佳答案

img2.data[i].gray = 0;


img2是指向struct的指针,因此您不能直接访问其成员。你必须写:

(*img2).data[i].gray = 0;


要么:

img2->data[i].gray = 0;

08-16 13:34