社区
C++ Builder
帖子详情
请教如何获取 *.tif 文件的(宽度、高度)属性
wf2091139
2006-04-12 10:09:55
用WIN32_FIND_DATA 只能获取一般文件常规属性 比如:创建日期、修改时间、文件大小等等。
如果我想取的一个 *.tif 图像文件的 宽度或高(单位是素或厘米)的属性值,请问该
如何操作?
...全文
1736
19
打赏
收藏
请教如何获取 *.tif 文件的(宽度、高度)属性
用WIN32_FIND_DATA 只能获取一般文件常规属性 比如:创建日期、修改时间、文件大小等等。 如果我想取的一个 *.tif 图像文件的 宽度或高(单位是素或厘米)的属性值,请问该 如何操作?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wf2091139
2006-04-22
打赏
举报
回复
......
真是奇怪了!我要谁给完整的代码了?
那个Class 我不知道,不可以问么?
jishiping
2006-04-21
打赏
举报
回复
又些人真的奇怪,非得要将完整不动的代码给他才行。上面的CFile,不过也就是VC中的一个文件读写的class,难道楼主连文件读写也不会么?
wf2091139
2006-04-20
打赏
举报
回复
没空上!有空的兄弟帮顶一下咯!
UP
wf2091139
2006-04-15
打赏
举报
回复
但不知道该怎么做。
wf2091139
2006-04-15
打赏
举报
回复
CFile file;
CFileException fe;
但是不是知道这两个怎么转换 :(
jishiping
2006-04-15
打赏
举报
回复
上面不是有代码了么?不过上面的代码BIG ENDIAN格式的,只支持LITTLE ENDIAN格式的。
BlueDeepOcean
2006-04-13
打赏
举报
回复
支持!跟进!
jishiping
2006-04-13
打赏
举报
回复
如果只是读取宽和高,还是简单的。
wf2091139
2006-04-13
打赏
举报
回复
UP
zyyoung
2006-04-12
打赏
举报
回复
友情up
wf2091139
2006-04-12
打赏
举报
回复
UP
wf2091139
2006-04-12
打赏
举报
回复
下面一段是在网上找到的关于tif结构的描述:
IFD是TIF图中最重要的数据结构,它包含了一个TIF文件中最重要的信息,一个TIF图可能有多个IFD,这说明文件中有多个图像,每个IFD标识1个图像的基本属性。 IFD结构中包含了三类成员,Directory Entry Count指出该结构里面有多少个目录入口;接下来就是N个线性排列的DE序列,数量不定(这就是 为什么称TIF格式文件为可扩充标记的文件,甚至用户可以添加自定义的标记属性),每个DE标识了图像的某一个属性;最后就是一个偏移量, 标识下一个文件目录相对于文件开始处的位置,当然,如果该TIF文件只包含了一幅图像,那么就只有一个IFD,显然,这个偏移量就等于0;
现在大致知道 当 标识 为256的 目录入口(DE)中的变量为图象的宽
当 标识 为257的 目录入口(DE)中的变量为图象的高
下面一段代码是VC实现TIF->BMP的源程序的一部分
对其中的一些类和方法不是很清楚。(高手们帮忙看看怎么转到bcb中 ^_^ )
(需要用到我在上面帖的那两个结构体)
....
....
2、添加TiffStruct.h文件,定义IFH和DE结构(参考前面的结构描述),用来接收读TIF文件的信息。
#ifndef _TIFFSTRUCT_
#define _TIFFSTRUCT_
typedef struct tagIMAGEFILEHEADER
{
WORD byteOrder;
WORD version;
DWORD offsetToIFD;
}IFH;
typedef struct tagDIRECTORYENTRY
{
WORD tag;
WORD type;
DWORD length;
DWORD valueOffset;
}DE;
#endif
3、在文档类中添加4个公有变量,并将其初始化为0。在TiffTestDoc.cpp中#include "TiffStruct.h"
DWORD m_dwBmSize; //图象的数据部分的大小
CPalette m_palDIB; //BMP图象调色板
HANDLE m_hDIB; //BMP图象内存块句柄
CSize m_sizeDoc; //图象的长和宽
4、在文档类的OnOpenDocument函数中定义局部工具变量并读文件
DWORD dwFileLength = 0;
CString strTemp = _T("");
WORD wDECount = 0;
BYTE* pDIB = NULL;
int i = 0;
IFH ifh;
ZeroMemory(&ifh, sizeof(IFH));
CFile file;
CFileException fe;
if(0 == file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite, &fe))
{
AfxMessageBox("打开文件失败");
return FALSE;
}
dwFileLength = file.GetLength();
//读IFH文件头
if(sizeof(IFH) != file.Read(&ifh, sizeof(IFH)))
{
AfxMessageBox("读TIF文件头失败");
return FALSE;
}
if(0x2a != ifh.version)
{
AfxMessageBox("该文件不是TIF格式,读文件失败");
return FALSE;
}
if(0x4949 != ifh.byteOrder)
{
AfxMessageBox("该TIF文件不是IBMPC字节序,读文件失败");
return FALSE;
}
file.Seek(ifh.offsetToIFD, CFile::begin);//将文件指针定位到IFD
//读文件有多少个目录入口
if(2 != file.Read(&wDECount, 2))
{
AfxMessageBox("无法获得TIF文件目录入口数量");
return FALSE;
}
strTemp.Format("该TIF文件有%d个目录入口", wDECount);
AfxMessageBox(strTemp);
//创建DE数组,接收信息,数组中有wDECount个元素
DE* pde = new DE[wDECount];
DE* pTemp = pde;
memset(pde, 0, sizeof(DE)*wDECount);
if(sizeof(DE)*wDECount != file.ReadHuge(pde, sizeof(DE)*wDECount))
{
AfxMessageBox("读图象文件目录失败");
delete []pde;
return FALSE;
}
//显示图像文件目录信息
for(i=0; itag, i, pTemp->type, i, pTemp->length, i, pTemp->valueOffset);
AfxMessageBox(strTemp);
}
//把图像的大小和图像数据的容量保存到成员变量中
for(i=0; i<wDECount; i++)
{
pTemp = pde + i;
if(256 == pTemp->tag)//tag为256的目录入口中的变量标识了图象宽度
{
m_sizeDoc.cx = pTemp->valueOffset;
}
if(257 == pTemp->tag) //图象高度
{
m_sizeDoc.cy = pTemp->valueOffset;
}
if(273 == pTemp->tag) //计算图象数据占用字节数
{
//m_dwBmSize = pTemp->valueOffset - sizeof(IFH);
//或者把tag=256的valueOffset乘以tag=257的valueOffset
m_dwBmSize = m_sizeDoc.cx * m_sizeDoc.cy;
}
}
....
....
wf2091139
2006-04-12
打赏
举报
回复
to:ccrun(老妖)
能详细点么?我不是很懂这个。
jixingzhong
2006-04-12
打赏
举报
回复
tif 文件中应该也有类似 bmp 文件一样的信息头的吧 ...
我猜的,
没有看到这个方面的资料 ~
楼主可以解析 tif 文件的话,
只要分析一下文件总的信息就可以了 ~
ccrun.com
2006-04-12
打赏
举报
回复
不用理会VC的那两个类,用API来搞就行。如CreateFile,SetFilePointer等。
wf2091139
2006-04-12
打赏
举报
回复
此处只考虑一个tiff文件只有一个图象。
如我定义了2个结构 IFH 和 DE ,那怎么用它门来接受TIF文件的信息?
typedef struct tagimagefileheader
{
WORD byteorder;
WORD version;
DWORD offsettoifd
}IFH;
typedef struct tagdirectoryentry
{
WORD tag;
WORD type;
DWORD length;
DWORD valueoffset;
}DE;
----------------------
另:
看了一段VC代码 上面有两个变量定义;
CFile file;
CFileException fe;
不知道 CFile 和 CFileException 在bcb中对应是什么?
wf2091139
2006-04-12
打赏
举报
回复
(我们右键一个 *.tif 文件 ,在他“属性”->“摘要”里面就可以看的到关于他的宽度和高度
的像素值。)
那究竟如何可以取到 tif 文件的这两个属性值?
ccrun.com
2006-04-12
打赏
举报
回复
tiff文件含有.tif的扩展名。它以8字节长的图象文件头开始(ifh),这个文件头中最重要的成员是一个指向名为图象文件目录(ifd)的数据结构的指针。Ifd是一个名为标记(tag)的用于区分一个或多个可变长度数据块的表,标记中含有关于图象的信息。Tiff文件格式定义70多种不同类型的标记,有的用来存放以象素为单位的图象宽度和高度,有的用来存放色表(如果需要的话),当然还必须有用来存放位图数据的标记,一个tiff格式文件完全为它的标记所决定,而且这种文件结构极易扩展,因为你要附加一些特征只须增加一些额外的标记。
究竟是什么使tiff文件如此复杂?一方面,要写一种能够识别所用不同标记的软件非常困难。大多数tiff的阅读程序只能识别一部分标记,所以会出现这种情况:有时一个应用程序创建的tiff文件,另一个应用程序却不能使用。创建tiff文件的程序还可能会在文件中加一些只有它自己认识的标记,虽然tiff的阅读程序可以跳过那些它们不认得的标记,但这样做总是有可能影响到图象的质量。
另一方面,一个tiff文件可以包含多个图象,每个图象都有自己的ifd和一系列标记。Tiff文件中的位图数据可能会用好几种方法来压缩,所以一个完备的tiff阅读程序应该有rle解压缩程序,lzw解压缩程序和其他一些算法的解压缩程序。然而更糟的是使用lzw的解码必须得到unisys公司的同意,且通常是需要付版税的。所以即使是一些相当不错的tiff阅读程序在它们遇到lzw算法压缩的图象时也是无能为力的。
尽管tiff是那么的复杂,但仍是一种最好的跨平台格式。因为它非常灵活,无论在视觉上还是其他方面,都能把任何图象编码成二进制形式而不丢失任何属性。
wf2091139
2006-04-12
打赏
举报
回复
再次UP
matlab的
文件
打开对话框函数uigetfile
matlab编程中有时想调入电脑中的某个
文件
,这时不妨用windows传统的
文件
打开对话框试一试: [filename, pathname] = uigetfile( ... {'*.jpg;*.
tif
;*.png;*.gif','All Image Files';... '*.*','All Files' },... '请选择要修改的图片(可多选)', ...
opendialog中filter图片格式的筛取
OpenFileDialog openDialog = new OpenFileDialog(); 同行显示多个扩展名、同时可以显示全部的
文件
: openDialog .Filter = "图像
文件
(*.gif;*.jpg;*.jpeg;*.png;*.psd)|*.gif;*.jpg;*.jpeg;*.png;*.psd|所有
文件
(*.*)|*.*"; 同行显示多个扩展名: openDi
MapGuide 2.1 显示Raster(*.
tif
)
MGOS版本为 2.1 1、给*.
tif
文件
制作一个配准
文件
*.tfw. 在ArcMap中打开*.
tif
文件
找到GeoReferencing 菜单,Rotate Left-->Rotate Right-->Update GeoReferencing 繁琐些,如果不把影像旋转一下,Update GeoReferencing菜单不可用啊。
使用Python 批量转移*.
tif
和*.mov
文件
使用Python 2.7 在win10 下实现批量转移不同
文件
夹下的图片和视频到同一个目录中 源目录:D:\DIPDocs 目的目录:D:\DIP3e 注意:使用shutil.move(src, dst),src是完整路径名称,如 D:\DIPDocs\CH02_Problem_Figures\fig001.
tif
import os import shutil if not (os.pa
ENVI标准格式
文件
转换为.
tif
文件
——基于ENVI库函数
ENVI标准格式
文件
转换为.
tif
文件
——基于ENVI库函数 1.目的 (1)了解ENVI标准格式
文件
(2)学习利用ENVI库函数将ENVI标准格式
文件
转换为.
tif
文件
的方法
C++ Builder
13,870
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章