예제 #1
0
        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;
        }
예제 #2
0
        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);
        }