如果我右键单击图像上的详细信息,我会在GPS下获得以下内容
查询EXIF(GpsLatitude和GpsLongitude)数据时我得到了
和
我可以看到第0行和第8行是度数和分钟,但其余的没有意义。我错过了什么?
谢谢
答案 0 :(得分:1)
Exif将纬度和经度存储为三个有理数(分数),其中分子和分母长度为四个字节。
在您的示例中,您只显示前14个值。需要考虑24个字节的值。
具体而言,纬度小时值为0x00000027 / 0x00000001
或39 / 1
。
请注意,这些值以little endian存储,因此必须反转字节。
只取字节0/8/16,你可能会遗漏溢出到其他字节的值,并且你也假设分母总是一个。
使用库从图像中提取此信息可能要容易得多。我维护这样一个.NET库,它可以很好地与VB.NET一起使用,并且完全支持Exif和许多其他类型的元数据来自多种文件格式。
如果您有兴趣,请查看https://github.com/drewnoakes/metadata-extractor-dotnet
答案 1 :(得分:0)
无法获得最后一组显示小数位(ToDouble不起作用),但这非常接近
If Not vLong Is Nothing Then
vLong1 = BitConverter.ToUInt32(vLong, 0)
vLong2 = BitConverter.ToUInt32(vLong, 8)
vLong3 = BitConverter.ToUInt32(vLong, 16)
vLongDecode = CType(vLong1, String) & " " & CType(vLong2, String) & " " & CType(vLong3, String)
End If
If Not vLat Is Nothing Then
vLat2 = BitConverter.ToUInt32(vLat, 8)
vLat1 = BitConverter.ToUInt32(vLat, 0)
vLat3 = BitConverter.ToUInt32(vLat, 16)
vLatDecode = CType(vLat1, String) & " " & CType(vLat2, String) & " " & CType(vLat3, String)
End If