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; } } }
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> }
/// <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); } }
/// <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); } }