#include <stdio.h>
unsigned short TIFF_file_order = 0;
unsigned short sget2 (unsigned char *s)
{
if (TIFF_file_order == 0x4949) /* "II" means little-endian */
return s[0] | s[1] << 8;
else /* "MM" means big-endian */
return s[0] << 8 | s[1];
}
unsigned short get2(FILE *ifp)
{
unsigned char str[2] = { 0xff,0xff };
fread (str, 1, 2, ifp);
return sget2(str);
}
unsigned int sget4 (unsigned char *s)
{
if (TIFF_file_order == 0x4949)/* "II" means little-endian */
return s[0] | s[1] << 8 | s[2] << 16 | s[3] << 24;
else /* "MM" means big-endian */
return s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3];
}
unsigned int get4(FILE *ifp)
{
unsigned char str[4] = { 0xff,0xff,0xff,0xff };
fread (str, 1, 4, ifp);
return sget4(str);
}
int main()
{
FILE *ifp = NULL;
unsigned int doff = 0, iTotalPageNum = 0;
unsigned short n = 0;
ifp = fopen("c:\\15.tif", "rb");
if(NULL == ifp)
{
return -1;
}
TIFF_file_order = 0;
TIFF_file_order = get2(ifp);
if(0 == TIFF_file_order)
{
fclose(ifp);
return -1;
}
get2(ifp);/*这个值应该是42, 跳过*/
doff = get4(ifp);/*第一个IFD的偏移量*/
while(doff)
{
iTotalPageNum++;/*n个IFD,n个page*/
if(0 != fseek(ifp, doff, SEEK_SET))
{
fclose(ifp);
return -1;
}
n = get2(ifp);
if(0 != fseek(ifp, n*12, SEEK_CUR))
{
fclose(ifp);
return -1;
}
doff = get4(ifp);
}
fclose(ifp);
printf("iTotalPageNum = %d\n",iTotalPageNum);
return iTotalPageNum;
}
unsigned short TIFF_file_order = 0;
unsigned short sget2 (unsigned char *s)
{
if (TIFF_file_order == 0x4949) /* "II" means little-endian */
return s[0] | s[1] << 8;
else /* "MM" means big-endian */
return s[0] << 8 | s[1];
}
unsigned short get2(FILE *ifp)
{
unsigned char str[2] = { 0xff,0xff };
fread (str, 1, 2, ifp);
return sget2(str);
}
unsigned int sget4 (unsigned char *s)
{
if (TIFF_file_order == 0x4949)/* "II" means little-endian */
return s[0] | s[1] << 8 | s[2] << 16 | s[3] << 24;
else /* "MM" means big-endian */
return s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3];
}
unsigned int get4(FILE *ifp)
{
unsigned char str[4] = { 0xff,0xff,0xff,0xff };
fread (str, 1, 4, ifp);
return sget4(str);
}
int main()
{
FILE *ifp = NULL;
unsigned int doff = 0, iTotalPageNum = 0;
unsigned short n = 0;
ifp = fopen("c:\\15.tif", "rb");
if(NULL == ifp)
{
return -1;
}
TIFF_file_order = 0;
TIFF_file_order = get2(ifp);
if(0 == TIFF_file_order)
{
fclose(ifp);
return -1;
}
get2(ifp);/*这个值应该是42, 跳过*/
doff = get4(ifp);/*第一个IFD的偏移量*/
while(doff)
{
iTotalPageNum++;/*n个IFD,n个page*/
if(0 != fseek(ifp, doff, SEEK_SET))
{
fclose(ifp);
return -1;
}
n = get2(ifp);
if(0 != fseek(ifp, n*12, SEEK_CUR))
{
fclose(ifp);
return -1;
}
doff = get4(ifp);
}
fclose(ifp);
printf("iTotalPageNum = %d\n",iTotalPageNum);
return iTotalPageNum;
}