【发布时间】:2012-03-18 00:21:14
【问题描述】:
我正在尝试从 PPM 文件中读取像素数据。我有一个读取标题的功能,所以我知道它指向像素数据的开头。我尝试使用 fgetc(file) 但如果该值超过一位,它将不起作用。我还尝试使用数组并将数组转换为 int 或 char,但我无法知道每个值有多少位数。我也不确定这些值是否由空格分隔。基本上我需要一种方法来提取像素数据。 (我正在使用 C。)
我现在的代码是:
char read_byte(FILE *ipt) {
int c, i=0, sum=0;
while (i<16) {
c=fgetc(ipt);
if((i%2)!=0 {
if(c&1) {
sum+=pow(2,i/2);
}
}
i++;
}
return (char)sum;
}
编辑: 起初我以为文件存储为 ASCII 值,然后我意识到它存储为二进制。现在我想我让它像十六进制一样。我不确定这是否正确。我真的被困住了。
编辑:稍微更改了我的代码
char read_byte(FILE *ipt) {
int c, i=0, sum=0;
while(i<8) {
c = fgetc(ipt);
c=c&1;
sum+=c*pow(2,i);
i++;
}
return sum;
}
我将总和打印为 %c
【问题讨论】:
-
这个答案可能会为您指明正确的方向:stackoverflow.com/questions/2693631/…
-
我们需要更多代码。程序是否正确读取了文件的所有前 8 部分,如netpbm.sourceforge.net/doc/ppm.html 所述,如果有,则它具有图像数据的大小、宽度和高度,以及给出字节数的最大值(每个颜色分量的 1 或 2) 个。
-
我可以正确读取标题。我正在做一个隐写术作业,现在我正试图从像素数据中提取信息。我们只需要担心 P6 和 1 字节,最大值 255。