Adobe XMP SDK项目应用(续1)

XMP-Tool-SDK功能确实非常完备,但是要想应用于实际软件产品,踩坑不少。近日就遇到将GPS信息写入exif扩展属性项,始终写入不进去。虽然前期项目对这个库已经做过深入学习,但是经过这次的项目再次涉及才知道,还远远不够深入。

GPS信息写入代码其实很简单:

CString sValue = pPosInfo->m_strRTKPOSlatitude;
UINT deg = 0, min = 0, sec = 0, ref = 0;
CSysUtils::LonOrLanToDegMinSecond(_tstof(sValue), deg, min, sec, ref);
XMP_Uns32 loc[6];
exifMgr->PutUns32(deg, &loc[0]);
exifMgr->PutUns32(1, &loc[1]);
exifMgr->PutUns32(min, &loc[2]);
exifMgr->PutUns32(1, &loc[3]);
exifMgr->PutUns32(sec * 1000000 + ref, &loc[4]);
exifMgr->PutUns32(1000000, &loc[5]);
exifMgr->SetTag(kTIFF_GPSInfoIFD, kTIFF_GPSLatitude, kTIFF_RationalType, 3, &loc[0]);

将经纬度转换成度分秒的形式,然后配合Rational结构或者上述代码即可。应用层调用代码就是如此简单,但是底层通过了将近4天的调试跟踪,临近崩溃边缘(准备放弃休息一天再说),意外发现仅仅只是SDK内部逻辑处理的时候出现了问题。XMP-Tool-SDK顾名思义,主要是针对处理XMP信息而设计的,而GPS的exif信息不在其重点要处理的数据之列。通过排查,exif中的GPS信息是无论如何也不会写入成功的。

问题1:如果通过上述代码设置了exif的GPS信息,只是为了写入XMP提供了一个数据而已,数据用完了,exif中的GPS节点还是被删除,这个问题需要解决。

问题2:既然设定了exif中的GPS属性,为啥还是会被删除呢?是因为sGPSInfoIFDMappings结构体中将其exportMode设置为了kExport_Always属性(可以通过修改默认属性值)。为什么要这么设定,是因为既然XMP已经有了GPS信息了,exif就没有存在的必要了。那只保留exif中的GPS,而不要XMP信息不行吗?对不起,这个库是专门针对XMP设计的,所以如果你需要这样做,就请自己改代码吧,反正接口作者思虑周到,都提前给我们预留好着呢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值