无法从数组中获取值(c)

时间:2017-05-02 09:07:18

标签: c arrays

我正在读取ppm文件中的代码,并将每个像素的值存储在p1,像素数组中,这是.red .green .blue(int)的结构。我设法创建了一个"负过滤器"但是,这张照片。我试图通过采用红色,绿色和蓝色像素的平均值来获得黑白。 我有像素p1,像素p2(负滤波器)和int p3(b& w)。但是,每个有p3 = ....的动作都会停止响应。比如

    for (i = 0; i < WIDTH; i++) {
            for (j = 0; j < HEIGHT; j++) {
                p3[i][j] = ((p1[i][j].red + p1[i][j].green + p1[i][j].blue)/3);
            }
    }

    for (i = 0; i < WIDTH; i++) {
        for (j = 0; j < HEIGHT; j++) {
            fprintf(pf3, "%d", p3[i][j]);
        }
    }

然而,当我将int p3 [WIDTH] [HEIGHT]更改为char p3 [WIDTH] [HEIGHT]时,程序运行但输出错误。 int和char都编译成功。有人能帮我吗?感谢。

编辑: 我希望通过将.ppm值输入到.red,.green和.blue中的像素p1 [WIDTH] [HEIGHT],我可以创建.ppm的.pgm黑白图片扩展名.ppm。然后计算RGB的平均值,并在写入.pgm之前将其分配到int p3中。

使用int p3时得到的内容,当我运行.exe停止工作而没有出现任何错误时崩溃。

当我使用char p3时,它运行得很好,但它给出了所有像素均值的所有负值。 (感谢@egoteclair,将这个字母放在未签名的前面已经得到了帮助)

我的新问题是为什么我不能使用int而不是unsigned char?

1 个答案:

答案 0 :(得分:1)

正常字符大小为8位。第一位将用于符号扩展。在24位png文件中,每个颜色字段包含8位。

24 / 3 = 8

因此尝试使用unsigned char而不是char。这允许您使用char的完整8位。