c# 獲取照片的經(jīng)緯度和時(shí)間的示例代碼
更新時(shí)間:2020年11月30日 10:52:34 作者:gisoracle
這篇文章主要介紹了c# 獲取照片的經(jīng)緯度和時(shí)間的示例代碼,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
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í)間的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#實(shí)現(xiàn)系統(tǒng)托盤通知的方法
這篇文章主要介紹了C#實(shí)現(xiàn)系統(tǒng)托盤通知的方法,涉及C#系統(tǒng)api調(diào)用的相關(guān)技巧,需要的朋友可以參考下2015-06-06
C# 屏蔽關(guān)鍵字的實(shí)現(xiàn)方法
前段時(shí)間在公司做了一個(gè)論壇屏蔽關(guān)鍵字的功能,我做的比較簡(jiǎn)單、實(shí)用~ 現(xiàn)在拿出來給博友們分享下..也希望大家能頂頂我~2013-05-05
Winform學(xué)生信息管理系統(tǒng)登陸窗體設(shè)計(jì)(1)
這篇文章主要為大家詳細(xì)介紹了Winform學(xué)生信息管理系統(tǒng)登陸窗體設(shè)計(jì)思路,感興趣的小伙伴們可以參考一下2016-05-05
C#請(qǐng)求唯一性校驗(yàn)支持高并發(fā)的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于C#請(qǐng)求唯一性校驗(yàn)支持高并發(fā)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
Unity Shader實(shí)現(xiàn)徑向模糊效果
這篇文章主要為大家詳細(xì)介紹了Unity Shader實(shí)現(xiàn)徑向模糊效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
C#實(shí)現(xiàn)路由器斷開連接,更改公網(wǎng)ip的實(shí)例代碼
C#實(shí)現(xiàn)路由器斷開連接,更改公網(wǎng)ip的實(shí)例代碼,需要的朋友可以參考一下2013-05-05

