public void SaveImage(string path) { if ((_image != null) && !string.IsNullOrWhiteSpace(path)) { BitmapEncoder encoder = null; var pos = path.LastIndexOf('.'); if (pos >= 0) { var ext = path.Substring(pos)?.ToLower(); if (!string.IsNullOrWhiteSpace(ext)) { string[] jpgExtensions = MimeTypeF.GetFileExtensions(MimeType.JPEG)?.Split(','); string[] pngExtensions = MimeTypeF.GetFileExtensions(MimeType.PNG)?.Split(','); string[] gifExtensions = MimeTypeF.GetFileExtensions(MimeType.GIF)?.Split(','); if ((pngExtensions != null) && pngExtensions.Contains(ext)) { encoder = new PngBitmapEncoder(); } else if ((jpgExtensions != null) && jpgExtensions.Contains(ext)) { encoder = new JpegBitmapEncoder(); } else if ((gifExtensions != null) && gifExtensions.Contains(ext)) { encoder = new GifBitmapEncoder(); } } } if (encoder != null) { encoder.Frames.Add(BitmapFrame.Create(_image)); using (var fileStream = new System.IO.FileStream(path, System.IO.FileMode.Create)) { encoder.Save(fileStream); } } else { throw new Exception("No bitmap encoder available."); } } _image = null; }
private void Export(object sender, RoutedEventArgs e) { var part = _editor.Part; if (part == null) { return; } var onRawContent = part.Type == "Raw Content"; var contentBlock = onRawContent ? _editor.GetRootBlock() : _lastSelectedBlock; if (contentBlock == null) { return; } var mimeTypes = _editor.GetSupportedExportMimeTypes(contentBlock); if (mimeTypes == null) { return; } if (mimeTypes.Count() == 0) { return; } string filterList = ""; for (int i = 0; i < mimeTypes.Count(); ++i) { // format filter as "name|extension1;extension2;...;extensionX" var extensions = MimeTypeF.GetFileExtensions(mimeTypes[i]).Split(','); string filter = MimeTypeF.GetName(mimeTypes[i]) + "|"; for (int j = 0; j < extensions.Count(); ++j) { if (j > 0) { filter += ";"; } filter += "*" + extensions[j]; } if (i > 0) { filterList += "|"; } filterList += filter; } // Show save dialog { Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog(); dlg.FileName = "Interactive Ink Document"; // Default file name dlg.DefaultExt = System.String.Empty; // Default file extension dlg.Filter = filterList; // Filter files by extension bool?result = dlg.ShowDialog(); if ((bool)result) { var filePath = dlg.FileName; var filterIndex = dlg.FilterIndex - 1; var extensions = MimeTypeF.GetFileExtensions(mimeTypes[filterIndex]).Split(','); if (extensions.Count() > 0) { int ext; for (ext = 0; ext < extensions.Count(); ++ext) { if (filePath.EndsWith(extensions[ext], StringComparison.OrdinalIgnoreCase)) { break; } } if (ext >= extensions.Count()) { filePath += extensions[0]; } try { var drawer = new ImageDrawer(); drawer.ImageLoader = UcEditor.ImageLoader; _editor.WaitForIdle(); _editor.Export_(contentBlock, filePath, drawer); System.Diagnostics.Process.Start(filePath); } catch (Exception ex) { MessageBox.Show(ex.ToString(), "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } } } }
private async System.Threading.Tasks.Task <string> ChooseExportFilename(MimeType[] mimeTypes) { var mimeTypeTextBlock = new TextBlock { Text = "Choose a mime type", MaxLines = 1, TextWrapping = TextWrapping.NoWrap, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 0, 0, 0), Width = 300, }; var mimeTypeComboBox = new ComboBox { IsTextSearchEnabled = true, SelectedIndex = -1, Margin = new Thickness(0, 5, 0, 0), Width = 300 }; foreach (var mimeType in mimeTypes) { mimeTypeComboBox.Items.Add(MimeTypeF.GetTypeName(mimeType)); } mimeTypeComboBox.SelectedIndex = 0; var nameTextBlock = new TextBlock { Text = "Enter Export File Name", MaxLines = 1, TextWrapping = TextWrapping.NoWrap, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 10, 0, 0), Width = 300 }; var nameTextBox = new TextBox { Text = "", AcceptsReturn = false, MaxLength = 1024 * 1024, TextWrapping = TextWrapping.NoWrap, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 5, 0, 10), Width = 300 }; var panel = new StackPanel { Margin = new Thickness(10), HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, }; panel.Children.Add(mimeTypeTextBlock); panel.Children.Add(mimeTypeComboBox); panel.Children.Add(nameTextBlock); panel.Children.Add(nameTextBox); var dialog = new ContentDialog { Title = "Export", Content = panel, PrimaryButtonText = "OK", SecondaryButtonText = "Cancel", IsPrimaryButtonEnabled = true, IsSecondaryButtonEnabled = true }; var result = await dialog.ShowAsync(); if (result == ContentDialogResult.Primary) { var fileName = nameTextBox.Text; var extIndex = mimeTypeComboBox.SelectedIndex; var extensions = MimeTypeF.GetFileExtensions(mimeTypes[extIndex]).Split(','); int ext; for (ext = 0; ext < extensions.Count(); ++ext) { if (fileName.EndsWith(extensions[ext], StringComparison.OrdinalIgnoreCase)) { break; } } if (ext >= extensions.Count()) { fileName += extensions[0]; } return(fileName); } return(null); }