2017-08-26 81 views
0

的意義,如果我右鍵單擊圖像,我得到的細節GPS下製作EXIF經度和緯度

enter image description here

當查詢EXIF(GpsLatitude和GpsLongitude)的數據,我得到

以下enter image description here

enter image description here

我可以看到,行0和8的度和分,但其餘的是沒有意義的。我錯過了什麼?

謝謝

回答

1

的Exif店緯度和經度三理性分子和分母長度爲四個字節的數字(分數)。

在你的榜樣,你只顯示前14個值。有24個字節的值需要考慮。

具體地說,緯度小時值爲0x00000027/0x00000001,或39/1

注意,值存儲小端,所以字節必須扭轉。

通過只取字節0/8/16,你可能缺少蔓延到其他字節的值,你也假設分母永遠是一個。


使用庫從圖像中提取這些信息可能會容易得多。我保持.NET這樣的庫將與VB.NET工作得很好,並具有許多文件格式的Exif和許多其他類型的元數據的全面支持。

如果你有興趣,就來看看https://github.com/drewnoakes/metadata-extractor-dotnet

+0

我已經標誌着起來,並作爲答案...將您庫還通過傳遞字節()或位圖工作?我們處理了很多圖像,不想開始將它們寫入文件 – gchq

+0

@gchq無需將數據寫入文件。您可以從字節數組或流中操作。 ImageMetadataReader是一個很好的開始。 –

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