# include“l_bitmap.h”
L_LTFIL_APIL_INTL_ReadFileTags (pszFile、uFlags puTagCount、ppTags puDataSize, ppData, pLoadOptions)
得到所有的标签存储在一个文件中。
字符串包含输入文件的名字。
国旗决定是否读取标签的整体数据。在适当的时候可以结合值通过使用位或(|):
国旗 | 意义 |
---|---|
READFILEMETADATA_NOMEMORY | [0 x01]不读取标签的整体数据。如果设置了这个标志,然后puDataSize ppData将不会使用和功能不会读取标签的整体数据。 |
如果设置了这个标志,uDataOffset LEADFILETAG结构的成员将会充满了lData值标签。这可以用来获取抵消为标签的文件数据存储有超过4个字节的数据。 |
地址的变量更新号码的标签中找到该文件。
pLEADEADFILETAG结构的指针指向一个数组。数组的每个元素包含一个标签的数据中找到该文件。ppTags元素的数量puTagCount
。这个数组时不再需要通过它L_FreeFileTags函数释放分配的内存。
变量的地址更新整个标签的大小的字节数据。
与一个指针变量的地址更新整个标签数据。字节的指针的大小puDataSize
。每个LEADEADFILETAG项发现包含一个偏移量,这个项目的数据存储在ppData。
指针可选的扩展加载选项。通过零使用默认加载选项
价值 | 意义 |
---|---|
成功 | 函数成功 |
< 1 | 一个错误发生。指返回代码。 |
你必须免费分配这个函数使用的数据L_FreeFileTags函数。
对于一般TIFF标签信息,请参考实现TIFF评论和标签。
这个函数是非常有用的阅读标签嵌入SubIFDs。例如,有时MakerNote Exif标记包含一个SubIFD抵消。你可以使用L_ReadFileTags SubIFD抵消,并把READFILEMETADATA_NOMEMORY标签。然后可以使用获得的抵消IFD的读取数据通过设置抵消价值LOADFILEOPTION.IFD。请注意,有时这是不可能的L_ReadFileTag如果MakerNote数据标签数大于4。看下面的一个例子。
必需的dll和库
Win32 x64, Linux。
这些示例处理文件标签、评论和地理的钥匙。
/ /示例1:这个示例将阅读所有的标签、评论和geo键存储在磁盘文件中。
L_INT ReadFileTagsExample1 (L_VOID)
{
FILEINFO fi;
L_INT nRet;
L_UINT我uTagCount = 0, uCommentCount = 0, uGeoKeyCount = 0;
pLEADFILETAG pTags = NULL, pCurrentTag pGeoKeys = NULL, pCurrentGeoKey;
L_SIZE_T uTagDataSize = 0, uCommentDataSize = 0, uGeoKeyDataSize = 0;
L_UCHAR * pTagData = NULL, * pCommentData = NULL, * pGeoKeyData =零;
L_CHAR * pszAscii =零;
pCurrentComment pLEADFILECOMMENT pComments =零;
L_TCHAR szImageFileName [L_MAXPATH];
lstrcpy (szImageFileName MAKE_IMAGE_PATH(文本(“ImageProcessingDemo \ \ image1.jpg”)));
/ /得到文件的格式
ZeroMemory (fi,运算符(FILEINFO));
fi。uStructSize =运算符(FILEINFO);
nRet = L_FileInfo (fi szImageFileName,运算符(FILEINFO), 0, NULL);
如果(nRet ! =成功)
返回nRet;
/ /读文件中的所有标记
如果成功(nRet = = & & L_TagsSupported (fi.Format))
{
/ /是的,阅读所有标签的文件
nRet = L_ReadFileTags (
szImageFileName,
0,
&uTagCount,
&pTags,
&uTagDataSize,
&pTagData,
零);
}
/ /读取所有文件中的注释
如果成功(nRet = = & & L_CommentsSupported (fi.Format))
{
/ /是的,阅读所有的评论从文件
nRet = L_ReadFileComments (
szImageFileName,
0,
&uCommentCount,
&pComments,
&uCommentDataSize,
&pCommentData,
零);
}
/ /读取所有的geo密钥文件中
如果成功(nRet = = & & L_GeoKeysSupported (fi.Format))
{
/ /是的,阅读所有的geo钥匙从文件
nRet = L_ReadFileGeoKeys (
szImageFileName,
0,
&uGeoKeyCount,
&pGeoKeys,
&uGeoKeyDataSize,
&pGeoKeyData,
零);
}
如果(nRet = =成功)
{
如果(uTagCount > 0)
{
/ /显示标签
wprintf(左“标签\ n”);
为(i = 0;我< uTagCount;我+ +)
{
pCurrentTag = &pTags[我];
/ /如果这个标签的类型是ASCII,得到数据
如果(pCurrentTag - > uType = = TAG_ASCII)
{
pszAscii = (L_CHAR *) malloc (pCurrentTag - > uDataSize + 1);
ZeroMemory (pszAscii pCurrentTag - > uDataSize + 1);
CopyMemory (pszAscii pTagData + pCurrentTag - > uDataOffset, pCurrentTag - > uDataSize);
}
其他的
{
pszAscii =零;
}
printf (“Id: 0 X % X,数据长度:% u,数据:% s \ n”、pCurrentTag - > uTag pCurrentTag - > uDataSize, pszAscii ! =零?pszAscii:“二进制数据”);
}
L_FreeFileTags (uTagCount pTags、uTagDataSize pTagData);
}
如果(uCommentCount > 0)
{
/ /显示评论
wprintf(左“评论\ n”);
为(i = 0;我< uCommentCount;我+ +)
{
pCurrentComment = &pComments[我];
/ /如果这类型的评论是ASCII,得到数据
printf (“Id: 0 X % X,数据长度:% u \ n”、pCurrentComment - > uType pCurrentComment - > uDataSize);
}
L_FreeFileComments (uCommentCount pComments、uCommentDataSize pCommentData);
}
如果(uGeoKeyCount > 0)
{
/ /显示地理钥匙
wprintf(左“GeoKeys \ n”);
为(i = 0;我< uGeoKeyCount;我+ +)
{
pCurrentGeoKey = &pGeoKeys[我];
/ /如果这类型的地理关键是ASCII,得到数据
如果(pCurrentGeoKey - > uType = = TAG_ASCII)
{
pszAscii = (L_CHAR *) malloc (pCurrentGeoKey - > uDataSize + 1);
ZeroMemory (pszAscii pCurrentGeoKey - > uDataSize + 1);
CopyMemory (pszAscii pGeoKeyData + pCurrentGeoKey - > uDataOffset, pCurrentGeoKey - > uDataSize);
}
其他的
{
pszAscii =零;
}
printf (“Id: 0 X % X,数据长度:% u,数据:% s \ n”、pCurrentGeoKey - > uTag pCurrentGeoKey - > uDataSize, pszAscii ! =零?pszAscii:“二进制数据”);
}
L_FreeFileTags (uGeoKeyCount pGeoKeys、uGeoKeyDataSize pGeoKeyData);
}
}
返回成功;
}
/ /示例2:这个例子将读取一个定制标记包含在一个佳能MakerNote标记。佳能MakerNote标记包含一个偏移量为一个包含Canon-specific SubIFD标签。你可以做一个web搜索“佳能makernote规范“佳能makernote标签上的细节。
L_INT ReadCanonSerialNumber2 (HWND HWND, TCHAR * pszFile)
{
/ /读取MakerNote标签
/ /步骤1:找到ExifIFD标签偏移量
L_UINT16 uType = TAG_LONG;
L_UINT uCount = 1;
L_INT nExifIFDOffset;
L_INT nTagSize = L_ReadFileTag (pszFile 0 x8769、&uType &uCount, &nExifIFDOffset, NULL);
如果(nTagSize ! = 4)
返回-5000;/ /自定义错误:这个文件不是一个Exif文件
/ /设置LOADFILEOPTION结构从Exif IFD阅读标签
LOADFILEOPTION LOADFILEOPTION;
L_GetDefaultLoadFileOption (&LoadFileOption运算符(LoadFileOption));
LoadFileOption。IFD = nExifIFDOffset;
LoadFileOption。国旗s = ELO_USEIFD;
/ /步骤2:找到MakerNote标签的偏移量。用L_EnumFileTags代替L_ReadFileTag
/ /因为它是唯一办法的偏移值标签有超过4个字节
L_UINT uTags;
LEADFILETAG * pTags;
L_INT nRet = L_ReadFileTags (pszFile、READFILEMETADATA_NOMEMORY &uTags, &pTags,空,空,&LoadFileOption);
如果(nRet ! =成功)
返回nRet;
为(使用UINT u = 0;u < uTags;u + +)
{
如果(pTags (u)。uTag = = 0 x927c)/ / makernote标签
{
/ /读取makernote标签
LoadFileOption。IFD = pTags [u] .uDataOffset;
/ /佳能Makernote标签列出了相机序列号
/ / 12相机序列号特别——显示序列号相机使用:printf (" % 04 x % 5 d ", highword, lowword)
nTagSize = L_ReadFileTag (pszFile 12 &uType &uCount, NULL, &LoadFileOption);
如果(nTagSize = = 4)
{
L_UINT uSerialNumber;
nTagSize = L_ReadFileTag (pszFile 12 &uType、&uCount &uSerialNumber, &LoadFileOption);
如果(nTagSize = = 4)
{
TCHAR s [50];
_stprintf_s(年代,_countof (s)、文本(“% 04 x % 5 d”),HIWORD (uSerialNumber) LOWORD (uSerialNumber));
对话框(hWnd,年代,文本(“序列号”),MB_OK);
}
}
L_FreeFileTags (uTags pTags 0, NULL);
返回成功;
}
}
L_FreeFileTags (uTags pTags 0, NULL);
返回-5001;/ /自定义错误:没有发现标签
}
帮助收藏
光栅net|C API|c++类库|HTML5 JavaScript
文档net|C API|c++类库|HTML5 JavaScript
医疗net|C API|c++类库|HTML5 JavaScript
医疗Web查看器net
188宝金博怎么下载
支持的平台上
net, Java, Android和iOS / macOS组件
C / c++类库的API
HTML5 JavaScript库
你的邮件已经发送到支持!有人应该联系!如果你的问题是紧急请回到聊天。
聊天时间:
周一——周五,上午6点等
谢谢你的反馈!
请填写表单重新开始一个新的聊天。
所有代理目前离线。
聊天时间:
周一-周五
早上8:30 - 6点
联系我们请填写这张表格,我们将通过电子邮件联系你。