private async Task WriteImage()
        {
            if (currentImageIndex == -1)
            {
                return;
            }
            try
            {
                await CreateFolder();

                StorageFile outputFile = await projectFolder.CreateFileAsync(filesNames.ElementAt(currentImageIndex), CreationCollisionOption.ReplaceExisting);

                var stream = (await outputFile.OpenStreamForWriteAsync()).AsRandomAccessStream();

                Guid encoderId;
                if (filesNames.ElementAt(currentImageIndex).Contains(".jpg"))
                {
                    encoderId = Windows.Graphics.Imaging.BitmapEncoder.JpegEncoderId;
                }

                var inputStream = await files.ElementAt(currentImageIndex).OpenStreamForReadAsync();

                BitmapDecoder decoder = await BitmapDecoder.CreateAsync(inputStream.AsRandomAccessStream());

                var           inputProperties = decoder.BitmapProperties;
                var           memStream       = new Windows.Storage.Streams.InMemoryRandomAccessStream();
                BitmapEncoder encoder2        = await BitmapEncoder.CreateForTranscodingAsync(memStream, decoder);

                WriteImageMetadata(encoder2, inputProperties);
                await encoder2.FlushAsync();

                memStream.Seek(0);
                stream.Seek(0);
                stream.Size = 0;
                await RandomAccessStream.CopyAsync(memStream, stream);

                memStream.Dispose();

                stream.Dispose();
                inputStream.Dispose();
                if (latitude.Text != null)
                {
                    await GeotagHelper.SetGeotagAsync(outputFile, myLocation);
                }
            }
            catch (Exception err)
            {
                switch (err.HResult)
                {
                case unchecked ((int)0x88982F41):    // WINCODEC_ERR_PROPERTYNOTSUPPORTED
                                                     // The file format does not support this property.
                    break;

                default:
                    break;
                }
            }
        }
示例#2
0
        private async void SetGeoDataFromPoint(StorageFile imageFile)
        {
            // <SnippetSetGeoDataFromPoint>
            var point = new Geopoint(
                new BasicGeoposition
            {
                Latitude  = 48.8567,
                Longitude = 2.3508,
            });

            await GeotagHelper.SetGeotagAsync(imageFile, point);

            // </SnippetSetGeoDataFromPoint>
        }
示例#3
0
        /// <summary>
        /// 情報書き込み
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void Button_Click_2(object sender, RoutedEventArgs e)
        {
            var filepath = FilePathBox.Text;
            var file     = await Windows.Storage.StorageFile.GetFileFromPathAsync(filepath);

            if (file != null)
            {
                // GPS値作成
                BasicGeoposition bgps = new BasicGeoposition();
                bgps.Latitude  = 48.0;
                bgps.Longitude = 2.0;
                bgps.Altitude  = 1.0;

                // GPS値をGeopointにセット
                Geopoint gps = new Geopoint(bgps);

                // GPS値をjpgファイルに書き込み
                await GeotagHelper.SetGeotagAsync(file, gps);
            }
        }
        private async Task SetGeotagAsync()
        {
            try
            {
                StorageFile file = await KnownFolders.PicturesLibrary.GetFileAsync(filename.Text);

                BasicGeoposition position = new BasicGeoposition();
                position.Latitude  = 10.0; // Use latitude 10.0, longitude 20.0 as an example
                position.Longitude = 20.0;
                position.Altitude  = 0.0;
                Geopoint geopoint = new Geopoint(position);

                await GeotagHelper.SetGeotagAsync(file, geopoint);

                LogStatus("SetGeotagAsync complete");
            }
            catch (Exception e)
            {
                LogError("Exception: " + e.Message);
            }
        }
示例#5
0
        /// <summary>
        /// 情報書き込み
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void Button_Click_2(object sender, RoutedEventArgs e)
        {
            var cur              = Directory.GetCurrentDirectory(); // exeのあるディレクトリ
            var filepath         = cur + @"\ginga.bmp";             // 元の画像
            var filepath_out_jpg = cur + @"\ginga_out.jpg";         // jpgとして保存する画像
            var filepath_out_bmp = cur + @"\ginga_out_fake.jpg";    // bmpとして保存する画像

            using (var fs = new FileStream(filepath, FileMode.Open, FileAccess.ReadWrite))
                using (var bmp = new System.Drawing.Bitmap(fs))
                {
                    // 元の画像を、jpgとbmpで保存し分ける
                    bmp.Save(filepath_out_jpg, System.Drawing.Imaging.ImageFormat.Jpeg);
                    bmp.Save(filepath_out_bmp, System.Drawing.Imaging.ImageFormat.Bmp);
                }

            // GPS値作成
            BasicGeoposition bgps = new BasicGeoposition()
            {
                Latitude = 3.0, Longitude = 2.0, Altitude = 1.0
            };
            // GPS値をGeopointにセット
            Geopoint gps = new Geopoint(bgps);

            try
            {
                // GPS値をjpgファイルに書き込み
                var stjpg = await Windows.Storage.StorageFile.GetFileFromPathAsync(filepath_out_jpg);

                await GeotagHelper.SetGeotagAsync(stjpg, gps);// →こっちは問題なくgeotag付与できる

                var stbmp = await Windows.Storage.StorageFile.GetFileFromPathAsync(filepath_out_bmp);

                await GeotagHelper.SetGeotagAsync(stbmp, gps);// →こっちは、jpgではないのでgeotag付与時に例外発生
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        private async void SetGeotagButton_Click()
        {
            // Set the approximate position of the observation deck of the Seattle Space Needle.
            BasicGeoposition position = new BasicGeoposition();

            position.Latitude  = 47.620491;
            position.Longitude = -122.349319;
            position.Altitude  = 158.12;
            Geopoint geopoint = new Geopoint(position);

            try
            {
                await GeotagHelper.SetGeotagAsync(file, geopoint);

                rootPage.NotifyUser("Geolocation set to Seattle Space Needle", NotifyType.StatusMessage);
            }
            catch (Exception ex)
            {
                // File I/O errors are reported as exceptions
                rootPage.NotifyUser("Exception: " + ex.Message, NotifyType.ErrorMessage);
            }
        }