reading/writing tiff 图片 C
reading/writing tiff images C
我正在处理 tiff 图像。我不应该使用任何库来这样做。
void copy(char *srcFilename, char *dstFileName)
{
FILE *fsrc, *fdst;
char c;
printf("Inside copy function\n");
fsrc=fopen(srcFilename, "rb");
if (fsrc==NULL)
{
printf("Couldn't open file %s for reading.\n", srcFilename);
exit(0);
}
/* Add usual error check */
fdst=fopen (dstFileName, "w");
/*Add usual error check */
for ( ; !feof(fsrc); )
fputc (fgetc (fsrc), fdst);
fclose (fsrc);
fclose (fdst);
}
此函数应该复制 tiff 图像。它适用于小的 tiff 图像,但当它更大时,输出不能显示为 tiff,我可以看到它的格式正在改变(通过比较 hexa 值)
提供的代码有两个问题:
以文本模式打开目标文件。请改用 fopen(dstFileName, "wb")
。
当到达EOF时,fgetc(fsrc)
将return一个特殊的文件结束标记,定义为EOF预处理器符号(值为-1)。此值不得写入目标文件。正确的外观应该是这样的:int c; while ((c = fgetc(fsrc)) != EOF) fputc(c, fdst);
我正在处理 tiff 图像。我不应该使用任何库来这样做。
void copy(char *srcFilename, char *dstFileName)
{
FILE *fsrc, *fdst;
char c;
printf("Inside copy function\n");
fsrc=fopen(srcFilename, "rb");
if (fsrc==NULL)
{
printf("Couldn't open file %s for reading.\n", srcFilename);
exit(0);
}
/* Add usual error check */
fdst=fopen (dstFileName, "w");
/*Add usual error check */
for ( ; !feof(fsrc); )
fputc (fgetc (fsrc), fdst);
fclose (fsrc);
fclose (fdst);
}
此函数应该复制 tiff 图像。它适用于小的 tiff 图像,但当它更大时,输出不能显示为 tiff,我可以看到它的格式正在改变(通过比较 hexa 值)
提供的代码有两个问题:
以文本模式打开目标文件。请改用
fopen(dstFileName, "wb")
。当到达EOF时,
fgetc(fsrc)
将return一个特殊的文件结束标记,定义为EOF预处理器符号(值为-1)。此值不得写入目标文件。正确的外观应该是这样的:int c; while ((c = fgetc(fsrc)) != EOF) fputc(c, fdst);