gpt4 book ai didi

c - 再现 RAW 图像 - C

转载 作者:行者123 更新时间:2023-11-30 15:20:57 26 4
gpt4 key购买 nike

我正在尝试使用我用 C 编写的小程序重现 .raw 图像文件,但每次运行该程序时,我的输出文件都变得不可读。

我的程序所做的就是获取每个像素并将其写入相应的输出文件。

另请注意,该程序仅支持灰度图像。

#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *fin, *fout;
char path_in[64], path_out[64], *rev, px;
int width, height, read, row, i;

printf("Input file name: ");
scanf("%s", path_in);
printf("Output file name: ");
scanf("%s", path_out);

printf("Width of image (in pixels): ");
scanf("%d", &width);
printf("Height of image (in pixels): ");
scanf("%d", &height);

fin = fopen(path_in, "r");
fout = fopen(path_out, "w");

row = 0;
rev = (char *)malloc(width * sizeof(char));
while(row < height)
{
for(i = 0; i < width; i++)
{
read = fread(&px, sizeof(char), 1, fin);
rev[i] = (unsigned int)px;
}

for(i = 0; i < width; i++)
if(i < width && row < height)
fwrite(&rev[i], sizeof(char), 1, fout);

row++;
}

fclose(fout);
fclose(fin);

return 0;
}

最佳答案

可能还有一些其他问题,但您已告诉 fopen 以文本模式打开文件:

fin = fopen(path_in, "r");
fout = fopen(path_out, "w");

而不是二进制模式:

fin = fopen(path_in, "rb");
fout = fopen(path_out, "wb");

这适合图像数据。

您还进行了奇怪的转换,这可能会破坏您的数据:

char ..., *rev, px;
...
rev = (char *)malloc(width * sizeof(char));
...
rev[i] = (unsigned int)px;

(unsigned int) 转换充其量是不必要的。

关于c - 再现 RAW 图像 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29760779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com