TIFF文件读出页数

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值