コード例 #1
0
        private void SetExifData()
        {
            // GPS version
            var image = Image;
            var exif  = new ExifWorks.ExifWorks(ref image);

            // center coordinate
            var center = new LongLat();

            foreach (var corner in Document.GetMapCornersLongLat())
            {
                center += corner / 4;
            }

            var ver          = new byte[] { 2, 2, 0, 0 };
            var longitudeRef = new byte[] { Convert.ToByte(center.Longitude < 0 ? 'W' : 'E'), 0 };
            var longitude    = ExifUtil.GetExifGpsCoordinate(center.Longitude);
            var latitudeRef  = new byte[] { Convert.ToByte(center.Latitude < 0 ? 'S' : 'N'), 0 };
            var latitude     = ExifUtil.GetExifGpsCoordinate(center.Latitude);

            exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsVer, ver, ExifWorks.ExifWorks.ExifDataTypes.UnsignedLong);
            exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLongitudeRef, longitudeRef, ExifWorks.ExifWorks.ExifDataTypes.AsciiString);
            exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLongitude, longitude, ExifWorks.ExifWorks.ExifDataTypes.UnsignedRational);
            exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLatitudeRef, latitudeRef, ExifWorks.ExifWorks.ExifDataTypes.AsciiString);
            exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLatitude, latitude, ExifWorks.ExifWorks.ExifDataTypes.UnsignedRational);
            if (Properties.EncodingInfo.Encoder.MimeType == "image/jpeg")
            {
                exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.JPEGQuality, new byte[] { (byte)(100 * ((JpegEncodingInfo)Properties.EncodingInfo).Quality) }, ExifWorks.ExifWorks.ExifDataTypes.UnsignedByte);
            }

            exif.SetPropertyString((int)ExifWorks.ExifWorks.TagNames.SoftwareUsed, Strings.QuickRoute + " " + Document.GetVersionString());
        }
コード例 #2
0
        /// <summary>
        /// Opens a document from a jpeg file with embedded QuickRoute Jpeg Extension Data.
        /// </summary>
        /// <param name="fileName">The file name of the jpeg file.</param>
        /// <param name="settings">The document settings to apply.</param>
        /// <returns>A QuickRoute document if the jpeg file contains QuickRoute Jpeg Extension Data, otherwise null.</returns>
        public static Document OpenFromJpeg(string fileName, DocumentSettings settings)
        {
            var ed = QuickRouteJpegExtensionData.FromJpegFile(fileName);

            if (ed == null)
            {
                return(null);
            }
            var mapAndBorderImage = (Bitmap)Image.FromFile(fileName);

            var mapImage = new Bitmap(ed.MapLocationAndSizeInPixels.Width, ed.MapLocationAndSizeInPixels.Height);

            using (var g = Graphics.FromImage(mapImage))
            {
                g.DrawImage(mapAndBorderImage,
                            new Rectangle(0, 0, ed.MapLocationAndSizeInPixels.Width, ed.MapLocationAndSizeInPixels.Height),
                            ed.MapLocationAndSizeInPixels,
                            GraphicsUnit.Pixel);
            }
            foreach (var pi in mapAndBorderImage.PropertyItems)
            {
                mapImage.SetPropertyItem(pi);
            }

            var exif             = new ExifWorks.ExifWorks(ref mapAndBorderImage);
            var qualityByteArray = exif.GetProperty((int)ExifWorks.ExifWorks.TagNames.JPEGQuality, new byte[] { 80 });

            var encodingInfo = new JpegEncodingInfo((double)qualityByteArray[0] / 100);

            using (var ms = new MemoryStream())
            {
                mapImage.Save(ms, encodingInfo.Encoder, encodingInfo.EncoderParams);
                var document = new Document(new Map(ms), settings)
                {
                    Sessions = ed.Sessions
                };
                if (document.Sessions.Count > 0)
                {
                    document.ProjectionOrigin = document.Sessions[0].ProjectionOrigin;
                }
                document.FileName   = fileName;
                document.FileFormat = QuickRouteFileFormat.Jpeg;
                document.Initialize();
                mapAndBorderImage.Dispose();
                mapImage.Dispose();
                return(document);
            }
        }
コード例 #3
0
ファイル: Document.cs プロジェクト: romanbdev/quickroute-gps
        /// <summary>
        /// Opens a document from a jpeg file with embedded QuickRoute Jpeg Extension Data.
        /// </summary>
        /// <param name="fileName">The file name of the jpeg file.</param>
        /// <param name="settings">The document settings to apply.</param>
        /// <returns>A QuickRoute document if the jpeg file contains QuickRoute Jpeg Extension Data, otherwise null.</returns>
        public static Document OpenFromJpeg(string fileName, DocumentSettings settings)
        {
            var ed = QuickRouteJpegExtensionData.FromJpegFile(fileName);
              if (ed == null) return null;
              var mapAndBorderImage = (Bitmap)Image.FromFile(fileName);

              var mapImage = new Bitmap(ed.MapLocationAndSizeInPixels.Width, ed.MapLocationAndSizeInPixels.Height);
              using(var g = Graphics.FromImage(mapImage))
              {
            g.DrawImage(mapAndBorderImage,
                    new Rectangle(0, 0, ed.MapLocationAndSizeInPixels.Width, ed.MapLocationAndSizeInPixels.Height),
                    ed.MapLocationAndSizeInPixels,
                    GraphicsUnit.Pixel);
              }
              foreach(var pi in mapAndBorderImage.PropertyItems)
              {
            mapImage.SetPropertyItem(pi);
              }

              var exif = new ExifWorks.ExifWorks(ref mapAndBorderImage);
              var qualityByteArray = exif.GetProperty((int)ExifWorks.ExifWorks.TagNames.JPEGQuality, new byte[] { 80 });

              var encodingInfo = new JpegEncodingInfo((double)qualityByteArray[0] / 100);
              using (var ms = new MemoryStream())
              {
            mapImage.Save(ms, encodingInfo.Encoder, encodingInfo.EncoderParams);
            var document = new Document(new Map(ms), settings) { Sessions = ed.Sessions };
            if (document.Sessions.Count > 0) document.ProjectionOrigin = document.Sessions[0].ProjectionOrigin;
            document.FileName = fileName;
            document.FileFormat = QuickRouteFileFormat.Jpeg;
            document.Initialize();
            mapAndBorderImage.Dispose();
            mapImage.Dispose();
            return document;
              }
        }
コード例 #4
0
        private void SetExifData()
        {
            // GPS version
              var image = Image;
              var exif = new ExifWorks.ExifWorks(ref image);

              // center coordinate
              var center = new LongLat();
              foreach (var corner in Document.GetMapCornersLongLat())
              {
            center += corner / 4;
              }

              var ver = new byte[] { 2, 2, 0, 0 };
              var longitudeRef = new byte[] { Convert.ToByte(center.Longitude < 0 ? 'W' : 'E'), 0 };
              var longitude = ExifUtil.GetExifGpsCoordinate(center.Longitude);
              var latitudeRef = new byte[] { Convert.ToByte(center.Latitude < 0 ? 'S' : 'N'), 0 };
              var latitude = ExifUtil.GetExifGpsCoordinate(center.Latitude);
              exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsVer, ver, ExifWorks.ExifWorks.ExifDataTypes.UnsignedLong);
              exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLongitudeRef, longitudeRef, ExifWorks.ExifWorks.ExifDataTypes.AsciiString);
              exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLongitude, longitude, ExifWorks.ExifWorks.ExifDataTypes.UnsignedRational);
              exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLatitudeRef, latitudeRef, ExifWorks.ExifWorks.ExifDataTypes.AsciiString);
              exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLatitude, latitude, ExifWorks.ExifWorks.ExifDataTypes.UnsignedRational);
              if (Properties.EncodingInfo.Encoder.MimeType == "image/jpeg")
              {
            exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.JPEGQuality, new byte[] {(byte)(100 * ((JpegEncodingInfo)Properties.EncodingInfo).Quality)}, ExifWorks.ExifWorks.ExifDataTypes.UnsignedByte);
              }

              exif.SetPropertyString((int)ExifWorks.ExifWorks.TagNames.SoftwareUsed, Strings.QuickRoute + " " + Document.GetVersionString());
        }