TIFF文件读出页数

TIFF文件读出页数includeunsig file order 0 unsignedshor unsignedchar s if TIFF file order 0x4949 nbsp II meanslittle endian returns 0 s 1 else nbsp nbsp MM

#include

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;
}
























































































版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222244.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午4:14
下一篇 2026年3月17日 下午4:14


相关推荐

  • 软件框架详解

    软件框架详解软件框架至少包含以下组成部分 nbsp nbsp 1 一系列完成计算的模块 在此称为构件 nbsp 2 构件之间的关系与交互机制 3 一系列可变点 也称热点 Hot spots 或调整点 4 可变点的行为调整机制 开发人员通过软件框架的行为调整机制 将领域中具体应用所特有的软件模块绑定到该软件框架的可变点 从而得到最终应用系统 这一过程称为软件框架的例化 instantiat

    2026年3月17日
    3
  • 关于如何将多个Cpp文件关联起来

    关于如何将多个Cpp文件关联起来一 C 编译模式 C 程序中 只包含两类文件 cpp 文件和 h 文件 其中 cpp 文件被称作 C 源文件 里面放的都是 C 的源代码 而 h 文件则被称作 C 头文件 里面放的也是 C 的源代码 C 语言支持 分别编译 separatecomp 一个程序所有的内容 可以分成不同的部分分别放在不同的 cpp 文件里 cpp 文件里的东西都是相对独立的 在

    2026年3月20日
    2
  • zipfile压缩文件夹_bad zip file

    zipfile压缩文件夹_bad zip fileimportzipfiledefzipDir(dirpath,outFULLName):zip=zipfile.ZipFile(outFULLName,’w’,zipfile.ZIP_DEFLATED)forpath,dirnames,filenamesinos.walk(dirpath):fpath=path.replace(dirpath,””)forfilenameinfilenames:zip.wri

    2025年12月12日
    5
  • 网络爬虫之动态内容爬取

    根据联合国网站可访问性审计报告,73%的主流网站都在其重要功能中依赖JavaScript。和单页面应用的简单表单事件不通,使用JavaScript时,不再是加载后立即下载所有页面内容。这样会造成许多网

    2021年12月29日
    39
  • STM32入门教程第一讲

    STM32入门教程第一讲STM32入门教程,采用STM32F10系列芯片

    2025年9月26日
    6
  • (Android) 如何使用HOOK实现动态注入以及自动化操作

    (Android) 如何使用HOOK实现动态注入以及自动化操作Android 如何使用 HOOK 实现动态注入以及自动化操作为什么会有这边博文 最近一直在搞一些 apk 激活成功教程以及自动化方面的东西 觉得有必要记录一下 也是为了修改下自己懒的毛病 很久很久很久没更新博客了 一 项目需求项目功能 本文将使用为例 利用 Hook 实现自动登录 自动退出登录功能项目流程 流程比较简单二 资源准备大致需要准备以下东西 一台空闲的安卓手机 能 roo

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号