L_ReadFileTags

# include“l_bitmap.h”

L_LTFIL_APIL_INTL_ReadFileTags (pszFile、uFlags puTagCount、ppTags puDataSize, ppData, pLoadOptions)

得到所有的标签存储在一个文件中。

参数

L_TCHAR* pszFile

字符串包含输入文件的名字。

L_UINTuFlags

国旗决定是否读取标签的整体数据。在适当的时候可以结合值通过使用位或(|):

国旗 意义
READFILEMETADATA_NOMEMORY [0 x01]不读取标签的整体数据。如果设置了这个标志,然后puDataSize ppData将不会使用和功能不会读取标签的整体数据。
如果设置了这个标志,uDataOffset LEADFILETAG结构的成员将会充满了lData值标签。这可以用来获取抵消为标签的文件数据存储有超过4个字节的数据。

L_UINT* puTagCount

地址的变量更新号码的标签中找到该文件。

pLEADFILETAG* ppTags

pLEADEADFILETAG结构的指针指向一个数组。数组的每个元素包含一个标签的数据中找到该文件。ppTags元素的数量puTagCount。这个数组时不再需要通过它L_FreeFileTags函数释放分配的内存。

L_SIZE_T* puDataSize

变量的地址更新整个标签的大小的字节数据。

L_UCHAR* * ppData

与一个指针变量的地址更新整个标签数据。字节的指针的大小puDataSize。每个LEADEADFILETAG项发现包含一个偏移量,这个项目的数据存储在ppData。

pLOADFILEOPTIONpLoadOptions

指针可选的扩展加载选项。通过零使用默认加载选项

返回

价值 意义
成功 函数成功
< 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;/ /自定义错误:没有发现标签}

LEADTOOLS光栅成像C API的帮助
188金宝搏的网址客服|支持|联系我们|知识产权的通知
©1991 - 2021领先的技术公司。保留所有权利。