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