使用QT读取tiff格式的地图数据

目录

一、TIFF文件基本格式

1)文件头(IFH)

2)图像目录(IFD)

3)属性信息(DE) 

4)数据实体 

二、读取地图数据

1)提取存储结构信息

2)读取数据

三、图像还原显示

一、TIFF文件基本格式

此处对TIFF文件格式的基本组成做一个宏观介绍,记录一下我在初次解析该格式文件时所产生的一些误解,也让大家避一些坑,可以更加快速直观的对TIFF文件的数据存储结构有一个基本了解。涉及到具体的格式说明网上已经有很多详细的介绍,此处不再赘述。TIFF文件基本格式由4部分组成,分别是:

  1. 文件头(IFH)
  2. 图像目录(IFD)
  3. 属性信息(DE)
  4. 数据实体

1)文件头(IFH)

一个TIFF文件只有一个文件头,就是文件开始的8个字节。最后四个字节是一个int型的整数,指向第一个IFD的起始位置,也叫偏移量。这个偏移量指的是相对于文件头的偏移字节数,比如若该偏移量取值为8,则表示第一个IFD结构的数据在文件中存放的起始位置为第9个字节(含)开始,在字节数组中的索引号为8。所以,若需要读取出第一个IFD的信息,从文件中第9个字节往后开始读取即可。

struct IFH
{
    qint16  byteOrder;
    qint16  version;
    qint32  firstIFD;
};

2)图像目录(IFD)

图像目录中包含了一副图像的全部属性信息,他不是一个定长结构,其字节数长度根据图像属性信息而定。一个TIFF格式的文件可以有多个IFD,也就是说一个TIFF文件可以存放多副图像,这也是为什么打开有些TIFF格式的文件可以浏览到多幅图像的原因。虽然IFD的长度不定,但存储结构是一致的,他的前两个字节是一个short短整型数据,表示该IFD中存放了多少个DE;他的最后4个字节是一个int型数据,表示下一个IFD存放的起始位置,也就是偏移量(同上),若没有其他图像了,则该偏移量值为0。在这两个数据之间是依次按序存放的DE结构数据,DE的个数就是由IFD的前两个字节决定的。

struct IFD
{
    qint16  DEnumber;//
    QVector<DE> DEs;
    qint32  nextIFDOffset;
};

3)属性信息(DE) 

属性信息(DE)正式名称也叫目录项,但我更倾向于理解他为图像的属性信息结构,因为图像的不同属性信息在这里表达,一个DE表征了一个图像属性,如图像高度、宽度、图像分片存放时每个片段的大小等。他有固定的长度12字节,前2个字节就是这个属性的标识号,不同的标识号表示不同的属性,具体对应值含义可查阅相关资料。依次后面2个字节表示存放该属性值所采用的数据类型,再后面4个字节表示存放该属性取值的个数,注意不是属性值的字节长度,最后4个字节表示该属性值。此处需要注意的是,如果4个字节存不下该属性值,则这4个字节表示的是该属性值的存放位置,也就是偏移量。如何判断此处存放的是属性值还是

1.该程序用QT开发,实现图片导入、显示、缩放、拖动及处理(冷暖色、灰度、亮度、饱和、模糊、锐化)。 经实测,我写的这个软件在导入10000*7096像素的超大图片的时候,缩放的速度比2345看图软件还快,2345缩放超大图会卡顿,但本软件不会^_^ 关于程序中缩放拖动部分的说面参见我的博客https://blog.csdn.net/weixin_43935474/article/details/89327314; 2.载入图片后,鼠标移动的时候可以显示鼠所在点的图像的坐标以及灰度; 3.缩放的时候,图片右上角可以显示当前图片的缩放比例; 4.用户可导入16位深的tiff灰度图文件(一般来说是由相机拍摄的灰度图数据),导入16位深的tiff的时候,用户需要先点击界面左上角的checkbox,然后再导入tiff图片,否则图片解析不出来。 注:Qt自带的QImage只能导入8位深的tiff灰度图,如果用qt的QImage导入16位深的灰度图,图像数据会被强制转换成argb格式的图像,数据就被更改了,所以我自己编写一个解析tiff文件的功能,我翻阅了很多博客,其中如下链接给我的帮助最大: https://blog.csdn.net/chenlu5201314/article/details/56276903 上述博客作为详细解析tiff文件结构的说明文档,写的非常详细,我也是根据上面的内容,自己编写了一个解析tiff文件的类(当然功能很少,只能解析符合特定条件的tiff文件) //************************************************************ //by Bruce Xu //注:解析tiff的类只解析特定的tiff文件! //1.解析的tiff文件中只存在一幅图,如果文件中存在多幅图,本类不支持解析! //2.图像数据为8位或16位深度的灰度图,如果是其他类型的图片,本类不支持解析! //3.图片没有被压缩过! //************************************************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琳琳简单点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值