c - 如何读取文本文件图像并将其保存到数组中?

标签 c arrays 2d

我必须编写一个程序来读取文本二进制图像 1 和 0,然后根据用户的选择对图像执行各种操作。我相信我对大部分程序都很好,我能够读取文件并显示它。 为了继续,我需要将图像保存到二维数组中,这就是我遇到的问题。

下面是我整个程序的一小部分示例,因为它的其余部分目前可以正常工作,这是我想弄清楚的部分,但是在继续搜索和观看视频之后,我终究无法弄清楚这个或在哪里我错了。

#define N 50
int imageArray [N][N];
int row, col;
int value;
char filename[30];
FILE *ptr_file;
printf("Enter the full name of the input file: ");
scanf("%s", filename);

ptr_file = fopen(filename, "r");

for(row = 0; row < N; row++){
    for(col = 0; col < N; col++){
        fscanf(ptr_file, "%d", &value);
        imageArray[row][col] = value;
    }

}

for(row = 0; row < N; row++){
    for(col = 0; col < N; col++){
        printf("%d", imageArray[N][N]);
    }
    printf("\n");
}

我试图保存到二维数组的图像都是 50x50 并且包含在 txt 文件中。

上面的代码当前输出全 0。图片背景由0组成,图片本身由1组成。

下面是我试图保存到数组的超小版本,想象一下它是 50x50!由于某种原因,我无法在此处粘贴完整图像,因为它重新格式化了它。它应该给出一个想法。

0000000
0001000
0011100
0111110
0011100
0001000
0000000

提前感谢您阅读这篇文章!

最佳答案

您的代码有两个问题。

  1. 正如 Mike P 所说,您应该将“%1d”与 fscanf() 一起使用,否则每个 fscanf() 调用都将读取整行,因为它将继续读取,直到第一个数字字符系列的末尾带有“%d”。

  2. 您的打印循环正在打印 imageArray[N][N] 而不是 imageArray[row][col]

在实现这两个修复后,我的代码可以按预期运行。

int imageArray [N][N];
int row, col;
int value;
char filename[30];
FILE *ptr_file;
printf("Enter the full name of the input file: ");
scanf("%s", filename);

ptr_file = fopen(filename, "r");

for(row = 0; row < N; row++){
    for(col = 0; col < N; col++){
        fscanf(ptr_file, "%1d", &value);
        imageArray[row][col] = value;
        printf("%d %d\n", row, col);
    }

}

for(row = 0; row < N; row++){
    for(col = 0; col < N; col++){
        printf("%d", imageArray[row][col]);
    }
    printf("\n");
}

作为附加说明,您应该检查 fscanf() 的返回以确保调用成功。如果你用你的原始代码这样做,它会给你一个很好的提示,让你知道第一个错误的位置。它还可用于检测无效的输入文件。

关于c - 如何读取文本文件图像并将其保存到数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49478802/

相关文章:

c - 无法使用 ioctl 更改 mac 地址

jquery - 如何从动态生成的数组值中删除双引号

iphone - OpenGL ES 中的大滚动背景

Java lwjgl&slick2d 游戏 GUI 和 HUD?

c++ - 按位运算n&(n-1)有什么作用?

c - 如何复制存储在 strtok() token 中的字符串?

c++ - C 将二维数组转换为双指针打印意外值

javascript - 如何反复使用 onclick() & if 语句更改图像?

ruby-on-rails - 如何通过 curl 发布数组值?

c++ - 使一维指针数组指向二维 vector 中的对象