我是靠谱客的博主 甜蜜铅笔,最近开发中收集的这篇文章主要介绍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('');
            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# 获取照片的经纬度和时间的示例代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(101)

评论列表共有 0 条评论

立即
投稿
返回
顶部