c# 获取照片的经纬度和时间的示例代码

 更新时间:2020年11月30日 10:52:34   作者:gisoracle  
这篇文章主要介绍了c# 获取照片的经纬度和时间的示例代码,帮助大家更好的理解和使用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://设置纬度
                if (objItem.Value.Length == 24)
                {
                  //degrees(将byte[0]~byte[3]转成uint, 除以byte[4]~byte[7]转成的uint)  
                  double d = BitConverter.ToUInt32(objItem.Value, 0) * 1.0d / BitConverter.ToUInt32(objItem.Value, 4);
                  //minutes(將byte[8]~byte[11]转成uint, 除以byte[12]~byte[15]转成的uint)  
                  double m = BitConverter.ToUInt32(objItem.Value, 8) * 1.0d / BitConverter.ToUInt32(objItem.Value, 12);
                  //seconds(將byte[16]~byte[19]转成uint, 除以byte[20]~byte[23]转成的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: //设置经度
                if (objItem.Value.Length == 24)
                {
                  //degrees(将byte[0]~byte[3]转成uint, 除以byte[4]~byte[7]转成的uint)  
                  double d = BitConverter.ToUInt32(objItem.Value, 0) * 1.0d / BitConverter.ToUInt32(objItem.Value, 4);
                  //minutes(将byte[8]~byte[11]转成uint, 除以byte[12]~byte[15]转成的uint)  
                  double m = BitConverter.ToUInt32(objItem.Value, 8) * 1.0d / BitConverter.ToUInt32(objItem.Value, 12);
                  //seconds(将byte[16]~byte[19]转成uint, 除以byte[20]~byte[23]转成的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表示拍照的时间,0x0132 最后更新时间
          {
            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 + "该照片由于照片损坏,因此无法进行导入。");
        return sXY;
      }
 
    }

以上就是c# 获取照片的经纬度和时间的示例代码的详细内容,更多关于c# 获取照片的经纬度和时间的资料请关注脚本之家其它相关文章!

相关文章

  • C#常用数据结构栈的详细介绍

    C#常用数据结构栈的详细介绍

    在C#中,Stack<T> 是一个后进先出(LIFO,Last-In-First-Out)集合类,位于System.Collections.Generic 命名空间中,本文详细介绍C#常用数据结构栈,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • Unity实现截图功能

    Unity实现截图功能

    这篇文章主要为大家详细介绍了Unity实现截图功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C#中Timer实现Tick使用精度的问题

    C#中Timer实现Tick使用精度的问题

    这篇文章主要介绍了C#中Timer实现Tick使用精度的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 解析C#中的私有构造函数和静态构造函数

    解析C#中的私有构造函数和静态构造函数

    这篇文章主要介绍了C#中的私有构造函数和静态构造函数,是C#入门学习中的基础知识,需要的朋友可以参考下
    2016-01-01
  • C#关于类的只读只写属性实例分析

    C#关于类的只读只写属性实例分析

    这篇文章主要介绍了C#关于类的只读只写属性实例分析,对于初学者更好的理解类的只读只写属性有一定的帮助,需要的朋友可以参考下
    2014-07-07
  • 探秘Unity游戏开发中的状态设计模式

    探秘Unity游戏开发中的状态设计模式

    这篇文章主要介绍了探秘Unity游戏开发中的状态设计模式,状态模式是Unity游戏开发中常用的一种设计模式,可以帮助开发者更好地管理游戏对象状态,提高游戏的可维护性和可扩展性
    2023-05-05
  • C#利用WebClient实现两种方式下载文件

    C#利用WebClient实现两种方式下载文件

    本篇文章主要介绍了C#利用WebClient 两种方式下载文件,详细的介绍了两种方式,非常具有实用价值,需要的朋友可以参考下。
    2017-02-02
  • c#委托把方法当成参数(实例讲解)

    c#委托把方法当成参数(实例讲解)

    本篇文章主要是对c#委托把方法当成参数的实例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • C#实现MQTT服务端与客户端通讯功能

    C#实现MQTT服务端与客户端通讯功能

    这篇文章介绍了C#实现MQTT服务端与客户端通讯的功能,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • C# 中如何利用lambda实现委托事件的挂接

    C# 中如何利用lambda实现委托事件的挂接

    在写一个小程序的时候,碰到了这样的问题,需要用委托来挂接事件,但是又想在这事件中使用局部的变量,而委托一旦定义好后,挂接方就没有办法再添加额外的形参了。那有没有什么办法,可以实现呢
    2013-07-07

最新评论