c# 獲取照片的經(jīng)緯度和時(shí)間的示例代碼
public List<string> GetXYFromPic(String jpgPath)
{
List<string> sXY = new List<string>();
try
{
//載入圖片
Image objImage = Image.FromFile(jpgPath);
//取得所有的屬性(以PropertyId做排序)
var propertyItems = objImage.PropertyItems.OrderBy(x => x.Id);
foreach (PropertyItem objItem in propertyItems)
{
//只取Id范圍為0x0000到0x001e
if (objItem.Id >= 0x0000 && objItem.Id <= 0x001e)
{
switch (objItem.Id)
{
case 0x0002://設(shè)置緯度
if (objItem.Value.Length == 24)
{
//degrees(將byte[0]~byte[3]轉(zhuǎn)成uint, 除以byte[4]~byte[7]轉(zhuǎn)成的uint)
double d = BitConverter.ToUInt32(objItem.Value, 0) * 1.0d / BitConverter.ToUInt32(objItem.Value, 4);
//minutes(將byte[8]~byte[11]轉(zhuǎn)成uint, 除以byte[12]~byte[15]轉(zhuǎn)成的uint)
double m = BitConverter.ToUInt32(objItem.Value, 8) * 1.0d / BitConverter.ToUInt32(objItem.Value, 12);
//seconds(將byte[16]~byte[19]轉(zhuǎn)成uint, 除以byte[20]~byte[23]轉(zhuǎn)成的uint)
double s = BitConverter.ToUInt32(objItem.Value, 16) * 1.0d / BitConverter.ToUInt32(objItem.Value, 20);
double dblGPSLatitude = (((s / 60 + m) / 60) + d);
sXY.Add(dblGPSLatitude.ToString("0.00000000"));
}
break;
case 0x0004: //設(shè)置經(jīng)度
if (objItem.Value.Length == 24)
{
//degrees(將byte[0]~byte[3]轉(zhuǎn)成uint, 除以byte[4]~byte[7]轉(zhuǎn)成的uint)
double d = BitConverter.ToUInt32(objItem.Value, 0) * 1.0d / BitConverter.ToUInt32(objItem.Value, 4);
//minutes(將byte[8]~byte[11]轉(zhuǎn)成uint, 除以byte[12]~byte[15]轉(zhuǎn)成的uint)
double m = BitConverter.ToUInt32(objItem.Value, 8) * 1.0d / BitConverter.ToUInt32(objItem.Value, 12);
//seconds(將byte[16]~byte[19]轉(zhuǎn)成uint, 除以byte[20]~byte[23]轉(zhuǎn)成的uint)
double s = BitConverter.ToUInt32(objItem.Value, 16) * 1.0d / BitConverter.ToUInt32(objItem.Value, 20);
double dblGPSLongitude = (((s / 60 + m) / 60) + d);
sXY.Add(dblGPSLongitude.ToString("0.00000000"));
}
break;
}
}
if (objItem.Id == 0x9003 || objItem.Id == 0x0132)//Id為0x9003表示拍照的時(shí)間,0x0132 最后更新時(shí)間
{
var propItemValue = objItem.Value;
var dateTimeStr = System.Text.Encoding.ASCII.GetString(propItemValue).Trim('\0');
var dt = DateTime.ParseExact(dateTimeStr, "yyyy:MM:dd HH:mm:ss", CultureInfo.InvariantCulture);
sXY.Add(dt.ToString());//.ToShortDateString()
}
}
objImage.Dispose();
return sXY;
}
catch (Exception ex)
{
//MessageManager.Show(jpgPath + "該圖片文件損壞");
//listErrorMessage.Add(jpgPath + "該照片由于照片損壞,因此無法進(jìn)行導(dǎo)入。");
return sXY;
}
}
以上就是c# 獲取照片的經(jīng)緯度和時(shí)間的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于c# 獲取照片的經(jīng)緯度和時(shí)間的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#常用數(shù)據(jù)結(jié)構(gòu)棧的詳細(xì)介紹
在C#中,Stack<T> 是一個(gè)后進(jìn)先出(LIFO,Last-In-First-Out)集合類,位于System.Collections.Generic 命名空間中,本文詳細(xì)介紹C#常用數(shù)據(jù)結(jié)構(gòu)棧,感興趣的朋友跟隨小編一起看看吧2024-09-09
C#中Timer實(shí)現(xiàn)Tick使用精度的問題
這篇文章主要介紹了C#中Timer實(shí)現(xiàn)Tick使用精度的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
解析C#中的私有構(gòu)造函數(shù)和靜態(tài)構(gòu)造函數(shù)
這篇文章主要介紹了C#中的私有構(gòu)造函數(shù)和靜態(tài)構(gòu)造函數(shù),是C#入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-01-01
探秘Unity游戲開發(fā)中的狀態(tài)設(shè)計(jì)模式
這篇文章主要介紹了探秘Unity游戲開發(fā)中的狀態(tài)設(shè)計(jì)模式,狀態(tài)模式是Unity游戲開發(fā)中常用的一種設(shè)計(jì)模式,可以幫助開發(fā)者更好地管理游戲?qū)ο鬆顟B(tài),提高游戲的可維護(hù)性和可擴(kuò)展性2023-05-05
C#利用WebClient實(shí)現(xiàn)兩種方式下載文件
本篇文章主要介紹了C#利用WebClient 兩種方式下載文件,詳細(xì)的介紹了兩種方式,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2017-02-02
c#委托把方法當(dāng)成參數(shù)(實(shí)例講解)
本篇文章主要是對c#委托把方法當(dāng)成參數(shù)的實(shí)例代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01
C#實(shí)現(xiàn)MQTT服務(wù)端與客戶端通訊功能
這篇文章介紹了C#實(shí)現(xiàn)MQTT服務(wù)端與客戶端通訊的功能,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
C# 中如何利用lambda實(shí)現(xiàn)委托事件的掛接
在寫一個(gè)小程序的時(shí)候,碰到了這樣的問題,需要用委托來掛接事件,但是又想在這事件中使用局部的變量,而委托一旦定義好后,掛接方就沒有辦法再添加額外的形參了。那有沒有什么辦法,可以實(shí)現(xiàn)呢2013-07-07

