Windows CE 中向JPG文件写入经纬度 时间等信息

最近在一个项目中  需要向JPG文件中写入时间  GPS位置等信息 如果是在PC上很好实现,但是在WinCE上由于.NET CF好多库都没有 所以实现起来还是挺困难,于是就在网上google看有什么开源的东西可以用,于是就找到了 ExifLib,在CodeProject的网址为http://www.codeproject.com/Articles/43665/ExifLibrary-for-NET,不过该源码为PC版的,要改改改才能在WinCE上运行,下面是示例代码

 

  /// <summary>
        /// 
        /// </summary>
        /// <param name="filename">JPG文件路径</param>
        /// <param name="latituderef">GPSLatitudeRef枚举值</param>
        /// <param name="latitude">纬度  弧度值</param>
        /// <param name="longituderef">GPSLongitudeRef 枚举值</param>
        /// <param name="longitude">经度  弧度值</param>
        /// <param name="time">DateTime 类型值  获取的GPS时间</param>
        private void SetLatituLongitudeAndGPSTime(string filename, GPSLatitudeRef latituderef, double latitude, GPSLongitudeRef longituderef, double longitude, DateTime time)
        {
            ImageFile file=null;
            try
            {
                file = ImageFile.FromFile(filename);
                CDms latitudedms = new CDms();
                latitudedms.Radian = Math.Abs(latitude);
                CDms longitudedms = new CDms();
                longitudedms.Radian = Math.Abs(longitude);
                uint latituded = (uint)Math.Round(latitudedms.d, 2) * 100;
                uint latitudem = (uint)Math.Round(latitudedms.m, 2) * 100;
                uint latitudes = (uint)Math.Round(latitudedms.s, 2) * 100;
                uint longituded = (uint)Math.Round(longitudedms.d, 2) * 100;
                uint longitudem = (uint)Math.Round(longitudedms.m, 2) * 100;
                uint longitudes = (uint)Math.Round(longitudedms.s, 2) * 100;
                ExifEnumProperty<GPSLatitudeRef> gpslatituderef = new ExifEnumProperty<GPSLatitudeRef>(ExifTag.GPSLatitudeRef, latituderef);
                GPSLatitudeLongitude gpsatitudeite = new GPSLatitudeLongitude(ExifTag.GPSLatitude, new MathEx.UFraction32[] { new MathEx.UFraction32(latituded, 100), new MathEx.UFraction32(latitudem, 100), new MathEx.UFraction32(latitudes, 100) });
                ExifEnumProperty<GPSLongitudeRef> gpslongituderef = new ExifEnumProperty<GPSLongitudeRef>(ExifTag.GPSLongitudeRef, longituderef);
                GPSLatitudeLongitude gpslongitude = new GPSLatitudeLongitude(ExifTag.GPSLongitude, new MathEx.UFraction32[] { new MathEx.UFraction32(longituded, 100), new MathEx.UFraction32(longitudem, 100), new MathEx.UFraction32(longitudes, 100) });
                //uint hour = (uint)time.Hour;
                //uint miniute = (uint)time.Minute;
                //uint second = (uint)time.Second;
                //GPSTimeStamp gpstime = new GPSTimeStamp(ExifTag.GPSTimeStamp, new MathEx.UFraction32[] { new MathEx.UFraction32(hour, 1), new MathEx.UFraction32(miniute, 1), new MathEx.UFraction32(second, 1) });
                ExifAscii datetimeoriginal = new ExifAscii(ExifTag.DateTimeOriginal, time.ToString("yyyy:MM:dd HH:mm:ss"));
                file.Properties.Add(datetimeoriginal);
                file.Properties.Add(gpslatituderef);
                file.Properties.Add(gpsatitudeite);
                file.Properties.Add(gpslongituderef);
                file.Properties.Add(gpslongitude);
                //file.Properties.Add(gpstime);
                file.Save(filename);
            }
            catch
            {
                file.Save(filename);
                Program.Log.Error("向JPG文件写入GPS信息出错");
            }
        }


 /// <summary>
        /// 往JPG图片上加入GPS信息
        /// </summary>
        /// <param name="filename">JPG文件路径</param>
        /// <returns>如果成功则返回添加了GPS信息的Bitmap,否则返回原图的Bitmap</returns>
        private Bitmap DrawGPSInfo(string filename)
        {
            ImageFile file = null;
            try
            {
                file = ImageFile.FromFile(filename);
                string timestr = file.Properties[ExifTag.DateTimeOriginal].Value.ToString();
                string latituderef = file.Properties[ExifTag.GPSLatitudeRef].Value.ToString();
                string latiude = (file.Properties[ExifTag.GPSLatitude] as ExifProperty).ToString();
                string longituderef = file.Properties[ExifTag.GPSLongitudeRef].Value.ToString();
                string longitude = (file.Properties[ExifTag.GPSLongitude] as ExifProperty).ToString();
                string[] strs1 = latiude.Split(new char[] { '.', '\'', '°' });
                string[] str2 = longitude.Split(new char[] { '.', '\'', '°' });
                string latitudestr = latituderef.Substring(0, 1).ToUpper() + ":" + strs1[0] + "°" + strs1[2] + "'" + strs1[4] + "\"";
                string longitudestr = longituderef.Substring(0, 1).ToUpper() + ":" + str2[0] + "°" + str2[2] + "'" + str2[4] + "\"";
                file.Save(filename);
                Font font = new Font("黑体", 10, FontStyle.Regular); //字体,大小
                SolidBrush brush = new SolidBrush(Color.Red); //笔刷,颜色
                Bitmap tempbitmap = new Bitmap(filename);
                Graphics g = Graphics.FromImage(tempbitmap);
                g.DrawString(timestr, font, brush, 10f, 10f);
                g.DrawString(latitudestr, font, brush, 10f, 30f);
                g.DrawString(longitudestr, font, brush, 10f, 50f);
                return tempbitmap;
            }
            catch
            {
                Program.Log.Error("JPG显示GPS信息出错");
                return new Bitmap(filename);
            }
        }


示例代码  和更改过后的源代码可到这下载

http://download.csdn.net/detail/xiaibiancheng/4972092
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值