Example #1
0
        private static void SaveMasterPicture(string picture_filename, Master master)
        {
            stdole.IPicture master_picture_pic = (stdole.IPicture)master.Picture;
            IntPtr          metafile_handle    = (IntPtr)master_picture_pic.Handle;

            using (var metafile = new System.Drawing.Imaging.Metafile(metafile_handle, true))
            {
                metafile.Save(picture_filename);
            }
            FormGetMasterImages.DeleteEnhMetaFile(metafile_handle);
        }
Example #2
0
        private BitmapSource MetafileToBitmapSource(System.Drawing.Imaging.Metafile metafile, System.Drawing.Imaging.ImageFormat imageFormat)
        {
            BitmapSource source;

            using (var stream = new System.IO.MemoryStream())
            {
                metafile.Save(stream, imageFormat);
                stream.Seek(0, System.IO.SeekOrigin.Begin);
                source = BitmapFrame.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
            }
            return(source);
        }
 private static void SaveMasterPicture(string picture_filename, Master master)
 {
     stdole.IPicture master_picture_pic = (stdole.IPicture) master.Picture;
     IntPtr metafile_handle = (IntPtr) master_picture_pic.Handle;
     using (var metafile = new System.Drawing.Imaging.Metafile(metafile_handle, true))
     {
         metafile.Save(picture_filename);
     }
     FormGetMasterImages.DeleteEnhMetaFile(metafile_handle);
 }
Example #4
0
        private static void ConvertWmfFile(string sourcePath, string filePath, string destPath, FormatType format)
        {
            System.Windows.Controls.Canvas WPFCanvas = null;
            var convert = new WMFConversion.WMF2WPF();
            var dpiX = 96;
            var dpiY = 96;
            string imageSavePath = null;

            try
            {
                Console.WriteLine("Converting: " + filePath);

                if (format == FormatType.Png)
                {
                    dpiX = 96;
                    dpiY = 96;
                }
                else if (format == FormatType.Xaml)
                {
                    // For xaml we need to save bitmaps to file
                    imageSavePath = Path.Combine(destPath, Path.GetFileNameWithoutExtension(filePath) + "_");
                }

                if (format != FormatType.PngNative)
                {
                    using (var loadStream = new FileStream(filePath, FileMode.Open))
                    {
                        WPFCanvas = convert.Convert(loadStream, dpiX, dpiY, imageSavePath);
                    }
                }

                if (format == FormatType.Png)
                {
                    Directory.CreateDirectory(Path.Combine(destPath,
                                                           Path.GetDirectoryName(
                                                                   filePath.Substring(sourcePath.Length + 1)))
                                                                   );
                    var outStream = new FileStream(Path.Combine(destPath, Path.Combine(Path.GetDirectoryName(filePath.Substring(sourcePath.Length + 1)), Path.GetFileNameWithoutExtension(filePath) + ".png")), FileMode.Create);

                    var renderBitmap =
                      new RenderTargetBitmap(
                        (int)WPFCanvas.Width,
                        (int)WPFCanvas.Height,
                        96d,
                        96d,
                        PixelFormats.Pbgra32);
                    renderBitmap.Render(WPFCanvas);

                    // Use png encoder for our data
                    var encoder = new PngBitmapEncoder();
                    encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
                    encoder.Save(outStream);
                    outStream.Close();
                    outStream.Dispose();
                }
                else if (format == FormatType.PngNative)
                {
                    Directory.CreateDirectory(Path.Combine(destPath,
                                                              Path.GetDirectoryName(
                                                                      filePath.Substring(sourcePath.Length + 1)))
                                                                      );
                    var outStream = new FileStream(Path.Combine(destPath, Path.Combine(Path.GetDirectoryName(filePath.Substring(sourcePath.Length + 1)), Path.GetFileNameWithoutExtension(filePath) + "_native.png")), FileMode.Create);

                    var metafile1 = new System.Drawing.Imaging.Metafile(filePath);
                    metafile1.Save(outStream, System.Drawing.Imaging.ImageFormat.Png);
                    outStream.Close();
                    outStream.Dispose();
                }
                else
                {
                    File.WriteAllText(Path.Combine(destPath, Path.GetFileNameWithoutExtension(filePath) + ".xaml"), System.Windows.Markup.XamlWriter.Save(WPFCanvas));
                }
            }
            catch (Exception ex)
            {
                Console.Write(ex.ToString());
            }
        }
Example #5
0
        internal void ProcessImage(FormatState formatState)
        { 
            string contentType;
            string imagePartUriString; 
 
            switch (formatState.ImageFormat)
            { 
                case RtfImageFormat.Wmf:
                case RtfImageFormat.Png:
                    contentType = "image/png";
                    break; 

                case RtfImageFormat.Jpeg: 
                    contentType = "image/jpeg"; 
                    break;
 
                default:
                    contentType = string.Empty;
                    break;
            } 

            bool skipImage = (formatState.ImageScaleWidth < 0) || (formatState.ImageScaleHeight < 0); 
 
            if (_wpfPayload != null && contentType != string.Empty && !skipImage)
            { 
                // Get image part URI string and image binary steam to write Rtf image data
                // into the container of WpfPayload
                Stream imageStream = _wpfPayload.CreateImageStream(_imageCount, contentType, out imagePartUriString);
 
                using (imageStream)
                { 
                    if (formatState.ImageFormat != RtfImageFormat.Wmf) 
                    {
                        // Write the image binary data on the container from Rtf image data 
                        _lexer.WriteImageData(imageStream, formatState.IsImageDataBinary);
                    }
                    else
                    { 
                        // Read the windows metafile from the rtf content and then convert it
                        // to bitmap data then save it as PNG on the container image part 
                        MemoryStream metafileStream = new MemoryStream(); ; 

                        using (metafileStream) 
                        {
                            // Get Windows Metafile from rtf content
                            _lexer.WriteImageData(metafileStream, formatState.IsImageDataBinary);
 
                            metafileStream.Position = 0;
 
                            // Create the metafile from the windows metafile data that is on rtf content 
                            System.Drawing.Imaging.Metafile metafile = new System.Drawing.Imaging.Metafile(metafileStream);
 
                            // Save image from the metafile to the container's image part as PNG type
                            metafile.Save(imageStream, System.Drawing.Imaging.ImageFormat.Png);
                        }
                    } 
                }
 
                // Increase the image count to generate the image source name 
                _imageCount++;
 
                formatState.ImageSource = imagePartUriString;

                // Create the image document node
                DocumentNode dnImage = new DocumentNode(DocumentNodeType.dnImage); 

                dnImage.FormatState = formatState; 
 
                StringBuilder imageStringBuilder = new StringBuilder();
 
                // Add the xaml image element
                imageStringBuilder.Append("<Image ");

                // Add the xaml image width property 
                imageStringBuilder.Append(" Width=\"");
                double width; 
                if (formatState.ImageScaleWidth != 0) 
                {
                    width = formatState.ImageWidth * (formatState.ImageScaleWidth / 100); 
                }
                else
                {
                    width = formatState.ImageWidth; 
                }
                imageStringBuilder.Append(width.ToString(CultureInfo.InvariantCulture)); 
                imageStringBuilder.Append("\""); 

                // Add the xaml image height property 
                imageStringBuilder.Append(" Height=\"");
                double height = formatState.ImageHeight * (formatState.ImageScaleHeight / 100);
                if (formatState.ImageScaleHeight != 0)
                { 
                    height = formatState.ImageHeight * (formatState.ImageScaleHeight / 100);
                } 
                else 
                {
                    height = formatState.ImageHeight; 
                }
                imageStringBuilder.Append(height.ToString(CultureInfo.InvariantCulture));
                imageStringBuilder.Append("\"");
 
                // Add the xaml image stretch property
                imageStringBuilder.Append(" Stretch=\"Fill"); 
                imageStringBuilder.Append("\""); 

 
                // Add the xaml image close tag
                imageStringBuilder.Append(">");

                // Add the image source property as the complex property 
                // This is for specifying BitmapImage.CacheOption as OnLoad instead of
                // the default OnDemand option. 
                imageStringBuilder.Append("<Image.Source>"); 
                imageStringBuilder.Append("<BitmapImage ");
                imageStringBuilder.Append("UriSource=\""); 
                imageStringBuilder.Append(imagePartUriString);
                imageStringBuilder.Append("\" ");
                imageStringBuilder.Append("CacheOption=\"OnLoad\" ");
                imageStringBuilder.Append("/>"); 
                imageStringBuilder.Append("</Image.Source>");
                imageStringBuilder.Append("</Image>"); 
 
                // Set Xaml for image element
                dnImage.Xaml = imageStringBuilder.ToString(); 

                // Insert the image document node to the document node array
                DocumentNodeArray dna = _converterState.DocumentNodeArray;
                dna.Push(dnImage); 
                dna.CloseAt(dna.Count - 1);
            } 
            else 
            {
                // Skip the image data if the image type is unknown or WpfPayload is null 
                _lexer.AdvanceForImageData();
            }
        }