private void Button_Save_Click(object sender, RoutedEventArgs e) { try { switch (ImageInfo.Image_Extension.ToUpper()) { case ".JPG": case ".JPEG": JpegBitmapEncoder jbe = new JpegBitmapEncoder(); ImageProcess.SaveUsingEncoder(BitmapSource, ImageInfo.Image_FullPath, jbe); break; case ".PNG": PngBitmapEncoder pbe = new PngBitmapEncoder(); ImageProcess.SaveUsingEncoder(BitmapSource, ImageInfo.Image_FullPath, pbe); break; case ".GIF": GifBitmapEncoder gbe = new GifBitmapEncoder(); ImageProcess.SaveUsingEncoder(BitmapSource, ImageInfo.Image_FullPath, gbe); break; } MessageBox.Show("儲存成功", "提示", MessageBoxButton.OK); } catch (Exception ex) { Error_Log.ErrorMessageOutput(ex.ToString()); MessageBox.Show("寫入失敗", "提示", MessageBoxButton.OK, MessageBoxImage.Error); } }
/// <summary> /// Saves a Gif image to the file system /// </summary> /// <param name="filename"></param> /// <param name="gifEnconder"></param> internal static void SaveGif(string filename, GifBitmapEncoder gifEnconder) { using (FileStream stream = new FileStream(filename, FileMode.Create)) { gifEnconder.Save(stream); } }
public GifBitmapEncoder GenerateWyMerge(Bitmap bitmap1, Bitmap bitmap2, int frames, int threshold) { GifBitmapEncoder gifEncoder = new GifBitmapEncoder(); List <Pixel> pixels1 = new List <Pixel>(); List <Pixel> pixels2 = new List <Pixel>(); Dictionary <Pixel, Pixel> pixelRelations = new Dictionary <Pixel, Pixel>(); SplitBmpPixels(bitmap1, out pixels1); SplitBmpPixels(bitmap2, out pixels2); pixelRelations = CreatePixelRelations(pixels1, pixels2, threshold); tProgress.Text = "Moving pixels around..."; for (int f = 0; f <= frames; f++) { Bitmap newFrame = new Bitmap(bitmap1.Width, bitmap1.Height); foreach (KeyValuePair <Pixel, Pixel> relation in pixelRelations) { float percFrames = (float)f / frames; System.Drawing.Color lerpedColor = System.Drawing.Color.FromArgb(255, (int)Lerp(relation.Key.c.R, relation.Value.c.R, percFrames), (int)Lerp(relation.Key.c.G, relation.Value.c.G, percFrames), (int)Lerp(relation.Key.c.B, relation.Value.c.B, percFrames)); newFrame.SetPixel((int)Lerp(relation.Key.x, relation.Value.x, percFrames), (int)Lerp(relation.Key.y, relation.Value.y, percFrames), lerpedColor); } gifEncoder.Frames.Add(BitmapFrame.Create(BitmapToBitmapSource(newFrame))); } tProgress.Text = "Saving WyMerge (" + pixelRelations.Count + " PxR)"; return(gifEncoder); }
public override void Save(Stream stream, ImageFormat format) { BitmapEncoder encoder; if (format.Equals(ImageFormat.Bmp)) { encoder = new BmpBitmapEncoder(); } else if (format.Equals(ImageFormat.Gif)) { encoder = new GifBitmapEncoder(); } else if (format.Equals(ImageFormat.Jpeg)) { encoder = new JpegBitmapEncoder(); } else if (format.Equals(ImageFormat.Png)) { encoder = new PngBitmapEncoder(); } else if (format.Equals(ImageFormat.Tiff)) { encoder = new TiffBitmapEncoder(); } else { throw new ArgumentOutOfRangeException("format", format, "Unsupported bitmap encoding format"); } encoder.Frames.Add(BitmapFrame.Create((BitmapSource)this)); encoder.Save(stream); }
private void GenerateImage(BitmapSource bitmap, ImageFormat format, Stream destStream) { BitmapEncoder encoder = null; switch (format) { case ImageFormat.JPG: encoder = new JpegBitmapEncoder(); break; case ImageFormat.PNG: encoder = new PngBitmapEncoder(); break; case ImageFormat.BMP: encoder = new BmpBitmapEncoder(); break; case ImageFormat.GIF: encoder = new GifBitmapEncoder(); break; case ImageFormat.TIF: encoder = new TiffBitmapEncoder(); break; default: throw new InvalidOperationException(); } encoder.Frames.Add(BitmapFrame.Create(bitmap)); encoder.Save(destStream); }
public static BitmapEncoder CreateBitmapEncoder(BitmapEncodingMode mode) { BitmapEncoder e = null; switch (mode) { case BitmapEncodingMode.Bmp: e = new BmpBitmapEncoder(); break; case BitmapEncodingMode.Gif: e = new GifBitmapEncoder(); break; case BitmapEncodingMode.Jpeg: e = new JpegBitmapEncoder(); break; case BitmapEncodingMode.Png: e = new PngBitmapEncoder(); break; case BitmapEncodingMode.Tiff: e = new TiffBitmapEncoder(); break; case BitmapEncodingMode.Wmp: e = new WmpBitmapEncoder(); break; } return(e); }
public GifBitmapEncoder getGif() { coordProvider.Reset(); GifBitmapEncoder gEnc = new GifBitmapEncoder(); Bitmap target = new Bitmap((int)rect.Width, (int)rect.Height); using (Graphics g = Graphics.FromImage(target)) { g.FillRectangle(Brushes.Black, 0, 0, 800, 450); } while (coordProvider.MoveNext()) { using (Graphics g = Graphics.FromImage(target)) { g.DrawRectangle(Pens.Turquoise, new Rectangle((int)(coordProvider.Current.X), (int)coordProvider.Current.Y, 1, 1)); } var bmp = target.GetHbitmap(); var src = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( bmp, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); gEnc.Frames.Add(BitmapFrame.Create(src)); Utility.NativeMethods.DeleteObject(bmp); // recommended, handle memory leak } return(gEnc); }
private void saveMerged_Button_Click(object sender, RoutedEventArgs e) { SaveFileDialog dialog = new SaveFileDialog() { DefaultExt = ".bmp", Filter = "Pliki graficzne|*.bmp; *.png; *.jpg; *.gif; *.jpeg" }; if (dialog.ShowDialog() == true) { BitmapEncoder encoder = new BmpBitmapEncoder(); var ext = Path.GetExtension(dialog.FileName); if (ext == ".png") { encoder = new PngBitmapEncoder(); } else if (ext == ".jpg" || ext == ".jpeg") { encoder = new JpegBitmapEncoder(); } else if (ext == ".gif") { encoder = new GifBitmapEncoder(); } encoder.Frames.Add(BitmapFrame.Create(BitmapToImageSource(bitmapToBeMerged))); using (var fileStream = new System.IO.FileStream(dialog.FileName, System.IO.FileMode.Create)) { encoder.Save(fileStream); } } }
/// <summary> /// Writes each layer out to an animated GIF file /// </summary> /// <param name="strFilePath">Output file name</param> /// <returns>True if successful, False if error</returns> public Boolean WriteToGif(String strFilePath) { List <Bitmap> images = new List <Bitmap>(); int nLayerCount = GetLayerCount(); for (int nLayer = 0; nLayer < nLayerCount; nLayer++) { Bitmap bitmap = new Bitmap(Convert.ToInt32(m_dWidth), Convert.ToInt32(m_dHeight), System.Drawing.Imaging.PixelFormat.Format32bppArgb); images.Add(bitmap); Graphics g = Graphics.FromImage(bitmap); Rectangle rRect = new Rectangle(0, 0, (int)m_dWidth, (int)m_dHeight); SolidBrush brush = new SolidBrush(Color.White); g.FillRectangle(brush, rRect); SelectLayer(nLayer); Draw(1, g, 0, 0); brush.Dispose(); } System.Windows.Media.Imaging.GifBitmapEncoder gEnc = new GifBitmapEncoder(); foreach (System.Drawing.Bitmap bmpImage in images) { var bmp = bmpImage.GetHbitmap(); var src = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( bmp, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); gEnc.Frames.Add(BitmapFrame.Create(src)); } using (FileStream fs = new FileStream(strFilePath, FileMode.Create)) { gEnc.Save(fs); } return(true); }
private void ZapiszGIF(object sender, RoutedEventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.FileName = "ImageGIF"; saveFileDialog.Filter = "GIF (*.gif)|*.gif"; if (saveFileDialog.ShowDialog() == true) { try { var encoder = new GifBitmapEncoder(); BitmapImage obr = new BitmapImage(); encoder.Frames.Add(BitmapFrame.Create((BitmapSource)obrazek.Source)); using (var stream = saveFileDialog.OpenFile()) { encoder.Save(stream); } } catch (Exception eeee) { MessageBox.Show(eeee.Message); MessageBox.Show("Błąd przy zapisie!", "Zapis do pliku", MessageBoxButton.OK, MessageBoxImage.Warning); } } }
private void SaveAsGif_Click(object sender, RoutedEventArgs e) { SaveFileDialog _sfd = new SaveFileDialog(); _sfd.Title = "Save Game As GIF."; _sfd.Filter = "GIF Files (*.gif) | *.gif"; if (_sfd.ShowDialog() == true) { using (FileStream _fs = new FileStream(_sfd.FileName, FileMode.Create, FileAccess.Write)) { try { _encoder.Save(_fs); } catch (Exception _exc) { this.ViewModel.ErrorString = _exc.Message; } _fs.Flush(); _fs.Close(); } } _encoder = new GifBitmapEncoder(); }
public static byte[] SaveToBytes(this BitmapSource image, ImageType saveType = ImageType.Png) { BitmapEncoder encoder; switch (saveType) { case ImageType.Gif: encoder = new GifBitmapEncoder(); break; case ImageType.Jpg: encoder = new JpegBitmapEncoder(); break; case ImageType.Tiff: encoder = new TiffBitmapEncoder(); break; default: // default: use PNG format encoder = new PngBitmapEncoder(); break; } encoder.Frames.Add(BitmapFrame.Create(image)); using (var ms = new MemoryStream()) { encoder.Save(ms); return(ms.ToArray()); } }
public static void GenerateImage(BitmapSource bitmap, string lowerExtension, Stream destStream) { /* * 参考资料: * [在WPF程序中将控件所呈现的内容保存成图像] * (http://www.cnblogs.com/TianFang/archive/2012/10/07/2714140.html) * [Rendering a WPF Container to Bitmap] * (http://weblog.west-wind.com/posts/2007/Sep/10/Rendering-a-WPF-Container-to-Bitmap) */ BitmapEncoder encoder = null; switch (lowerExtension) { case ".jpg": { encoder = new JpegBitmapEncoder(); break; } case ".png": { encoder = new PngBitmapEncoder(); break; } case ".bmp": { encoder = new BmpBitmapEncoder(); break; } case ".gif": { encoder = new GifBitmapEncoder(); break; } case ".tif": { encoder = new TiffBitmapEncoder(); break; } default: { encoder = new BmpBitmapEncoder(); break; } } encoder.Frames.Add(BitmapFrame.Create(bitmap)); encoder.Save(destStream); }
/// <summary> /// 儲存 BitmapIimage 影像 /// </summary> /// <param name="bitmapSource">BitmapSource資料來源</param> /// <param name="fileName">儲存路徑</param> /// <param name="encoder">編碼</param> public static void SaveUsingEncoder(BitmapSource bitmapSource, string fileName, string extension) { using (var stream = File.Create(fileName)) { BitmapEncoder encoder; switch (extension.ToUpper()) { case ".JPG": case ".JPEG": encoder = new JpegBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bitmapSource)); encoder.Save(stream); break; case ".PNG": encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bitmapSource)); encoder.Save(stream); break; case ".GIF": encoder = new GifBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bitmapSource)); encoder.Save(stream); break; } } }
private static void GifCoderTest() { var _gifFileName = "F_LAW.gif"; var _input = new FileStream(_gifFileName, FileMode.Open); var _gifCoder = new GifBitmapCoder(); _gifCoder.Load(_input); _input.Close(); for (int i = 0; i < _gifCoder.Frames.Count; i++) { var _output = String.Format(@"result\{0}{1:d3}.gif", Path.GetFileNameWithoutExtension(_gifFileName), i); var _encoder = new GifBitmapEncoder(); _encoder.Frames.Add(_gifCoder.Frames[i].Frame); using (var _fs = new FileStream(_output, FileMode.Create)) { _encoder.Save(_fs); } } var _output1 = new FileStream("output.gif", FileMode.Create); _gifCoder.Save(_output1); _output1.Close(); }
private static BitmapEncoder GetBitmapEncoder(string imageContentType) { BitmapEncoder bitmapEncoder; switch (imageContentType) { case ImageBmpContentType: bitmapEncoder = new BmpBitmapEncoder(); break; case ImageGifContentType: bitmapEncoder = new GifBitmapEncoder(); break; case ImageJpegContentType: bitmapEncoder = new JpegBitmapEncoder(); // break; case ImageTiffContentType: bitmapEncoder = new TiffBitmapEncoder(); break; case ImagePngContentType: bitmapEncoder = new PngBitmapEncoder(); break; default: bitmapEncoder = null; break; } return(bitmapEncoder); }
public static void CaptureOutGifAnimation( string path, MediaPlayer player, double startSeconds = 0, double waitSeconds = 0.1, int count = 10, double maxWidth = 640, CRGBA3x3FilteringProc filtering = null, int dpi = Image.DEFAULT_dpi) { if (player is null) { return; } // 読み込みが完了するまで待機 waitMediaSetup(player); int width, height; // リサイズ後のサイズを計算 calcRectSize(player, maxWidth, out width, out height); double volume = player.Volume; player.Volume = 0; var gEnc = new GifBitmapEncoder(); for (int i = 0; i < count; ++i) { // 指定位置へシーク double pos = startSeconds + (double)i * waitSeconds; player.Position = TimeSpan.FromSeconds(pos); player.Pause(); // 読み込みが完了するまで待機 waitMediaSetup(player, pos); var renderTarget = new RenderTargetBitmap(width, height, dpi, dpi, PixelFormats.Pbgra32); capture( renderTarget, player, width, height, filtering, dpi ); gEnc.Frames.Add(BitmapFrame.Create(renderTarget)); } player.Volume = volume; using (FileStream fs = new FileStream(path, FileMode.Create)) { gEnc.Save(fs); } }
/// <summary> /// 将图片保存到文件 /// </summary> /// <param name="bitmap">BitmapSource</param> /// <param name="format">图像类型</param> /// <param name="fileName">保存文件名</param> public static void ImageToFile(BitmapSource bitmap, ImageFormat format, string fileName) { BitmapEncoder encoder; switch (format) { case ImageFormat.JPG: encoder = new JpegBitmapEncoder(); break; case ImageFormat.PNG: encoder = new PngBitmapEncoder(); break; case ImageFormat.BMP: encoder = new BmpBitmapEncoder(); break; case ImageFormat.GIF: encoder = new GifBitmapEncoder(); break; default: throw new InvalidOperationException(); } FileStream fs = new FileStream(fileName, FileMode.Create); encoder.Frames.Add(BitmapFrame.Create(bitmap)); encoder.Save(fs); fs.Dispose(); fs.Close(); }
public static string saveAs_Gif(this Image image, string pathToSaveImage) { return((string)image.wpfInvoke( () => { try { using (FileStream outStream = new FileStream(pathToSaveImage, FileMode.Create)) { var gifBitmapEncoder = new GifBitmapEncoder(); gifBitmapEncoder.Frames.Add(BitmapFrame.Create((BitmapImage)image.Source)); //BitmapFrame.Create(image)); gifBitmapEncoder.Save(outStream); } } catch (Exception ex) { ex.log("in WPF Image saveas_Gif"); } if (pathToSaveImage.fileExists()) { return pathToSaveImage; } return ""; })); }
/// <summary> /// 获取影像的编码格式 /// <param name="filePath">文件路径</param> /// </summary> //-------------------------------------------------------------------------- //修改历史: //日期 修改人 修改 //2010-8-5 qizhenguo 创建代码 //-------------------------------------------------------------------------- private BitmapEncoder GetEncoder(string filePath) { BitmapEncoder encoder = new JpegBitmapEncoder(); string ext = Path.GetExtension(filePath); switch (ext) { case "jpg": case "jpeg": encoder = new JpegBitmapEncoder(); break; case "bmp": encoder = new BmpBitmapEncoder(); break; case "tiff": case "tif": encoder = new TiffBitmapEncoder(); break; case "png": encoder = new PngBitmapEncoder(); break; case "gif": encoder = new GifBitmapEncoder(); break; default: break; } return(encoder); }
/// <summary> /// 保存图像 /// </summary> /// <param name="savePath">图像保存路径</param> /// <param name="BS">控件源</param> /// <param name="extName">文件拓展名</param> public static void SaveImage(string savePath, BitmapSource BS, string extName) { BitmapEncoder encoder = null; switch (extName) { case ".png": encoder = new PngBitmapEncoder(); break; case ".jpg": encoder = new JpegBitmapEncoder(); break; case ".bmp": encoder = new BmpBitmapEncoder(); break; case ".gif": encoder = new GifBitmapEncoder(); break; case ".tiff": encoder = new TiffBitmapEncoder(); break; default: throw new InvalidOperationException(); } encoder.Frames.Add(BitmapFrame.Create(BS)); encoder.Save(File.Create(savePath)); }
private void RecordGif(int frames, int interval) { _gifBitmapEncoder = new GifBitmapEncoder(); for (var i = 0; i < frames; i++) { _capture.CaptureScreen(); Thread.Sleep(interval); } _path = new RelativeFile { SubDirectory = "Animations", Name = "GifRecording", Extension = ".gif", TimeStampFile = true, UseDetailedTimeStamp = true }; using (var filestream = new FileStream(_path.GetFullPath(), FileMode.Create)) { _gifBitmapEncoder.Save(filestream); } _gifBitmapEncoder = null; }
public void SaveToFile(string path, ImageFileType type, double dpiX = 96.0, double dpiY = 96.0) { var bitmapSource = CaptureScreen(this.Content, dpiX, dpiY); BitmapEncoder encoder = null; switch (type) { case ImageFileType.BMP: encoder = new PngBitmapEncoder(); break; case ImageFileType.GIF: encoder = new GifBitmapEncoder(); break; case ImageFileType.JPEG: encoder = new JpegBitmapEncoder(); break; case ImageFileType.PNG: encoder = new PngBitmapEncoder(); break; } SaveBitmapSource(bitmapSource, encoder, path); }
//This method takes in a list of imagedata found in the database, creates a new gifbitmapencoder and puts the images into the newly formed gif. public GifBitmapEncoder Create(IEnumerable <ImageData> listOFImages, int frameRate = 2) { JpegBitmapDecoder decoder; BitmapSource convertToBmp; GifBitmapEncoder newGif = new GifBitmapEncoder(); //Run through the list of ImageData from the database foreach (BlueMarble.Data.ImageData indImage in listOFImages) { //Get the image based off of the url found on the data of the image var request = WebRequest.Create(indImage.Lowresurl); using (var response = request.GetResponse()) using (var webstream = response.GetResponseStream()) { decoder = new JpegBitmapDecoder(webstream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default); convertToBmp = decoder.Frames[0]; //The amount of times you store the image in the in the gif, the slower it appears to transition, default for this speed is 2 for (int x = 0; x < frameRate; x++) { newGif.Frames.Add(BitmapFrame.Create(convertToBmp)); } } } return(newGif); }
private void InitializeBitmapEncoder() { switch (EncodingFormat) { case BitmapEncoding.BMP: Encoder = new BmpBitmapEncoder(); break; case BitmapEncoding.GIF: Encoder = new GifBitmapEncoder(); break; case BitmapEncoding.JPEG: Encoder = new JpegBitmapEncoder(); break; case BitmapEncoding.PNG: Encoder = new PngBitmapEncoder(); break; case BitmapEncoding.TIFF: Encoder = new TiffBitmapEncoder(); break; case BitmapEncoding.WMP: Encoder = new WmpBitmapEncoder(); break; } }
/// <summary> /// 将指定位图保存到指定路径中 /// </summary> /// <param name="bitmap">要保存的位图</param> /// <param name="path">要保存到的路径(包含文件名和扩展卡名)</param> public static void Save(BitmapSource bitmap, string path) { BitmapEncoder encoder = null; string fileExtension = System.IO.Path.GetExtension(path).ToUpper(); //选取编码器 switch (fileExtension) { case ".BMP": encoder = new BmpBitmapEncoder(); break; case ".GIF": encoder = new GifBitmapEncoder(); break; case ".JPEG": encoder = new JpegBitmapEncoder(); break; case ".PNG": encoder = new PngBitmapEncoder(); break; case ".TIFF": encoder = new TiffBitmapEncoder(); break; default: throw new Exception("无法识别的图像格式!"); } encoder.Frames.Add(BitmapFrame.Create(bitmap)); using (var file = File.Create(path)) encoder.Save(file); }
public static BitmapEncoder CreateEncoder(BitmapEncoderType encoderType, BitmapSource bitmapSource) { BitmapEncoder bitmapEncoder; switch (encoderType) { case BitmapEncoderType.BMP: bitmapEncoder = new BmpBitmapEncoder(); break; case BitmapEncoderType.GIF: bitmapEncoder = new GifBitmapEncoder(); break; case BitmapEncoderType.PNG: bitmapEncoder = new PngBitmapEncoder(); break; case BitmapEncoderType.TIFF: bitmapEncoder = new TiffBitmapEncoder(); break; case BitmapEncoderType.WMP: bitmapEncoder = new WmpBitmapEncoder(); break; default: bitmapEncoder = new JpegBitmapEncoder(); break; } bitmapEncoder.Frames.Add(BitmapFrame.Create(bitmapSource)); return(bitmapEncoder); }
public ScreenshotTakenEventArgs(BitmapSource bitmap, ImageFormat format = null) { if (format == null) { format = ImageFormat.Png; } BitmapEncoder encoder = new PngBitmapEncoder(); if (format.Equals(ImageFormat.Bmp)) { encoder = new BmpBitmapEncoder(); } if (format.Equals(ImageFormat.Gif)) { encoder = new GifBitmapEncoder(); } if (format.Equals(ImageFormat.Jpeg)) { encoder = new JpegBitmapEncoder(); } if (format.Equals(ImageFormat.Tiff)) { encoder = new TiffBitmapEncoder(); } encoder.Frames.Add(BitmapFrame.Create(bitmap)); var memoryStream = new MemoryStream(); encoder.Save(memoryStream); ImageData = memoryStream; ImageExtension = encoder.CodecInfo.FileExtensions.Split(',')[0]; // First extension. Usually the best. But it doesn't matter much. Yes. }
private void bGenerate_Click(object sender, EventArgs e) { if (bmp1 != null && bmp2 != null) { if (bmp1.Width == bmp2.Width && bmp1.Height == bmp2.Height) { if (bmp1.PixelFormat == System.Drawing.Imaging.PixelFormat.Format24bppRgb && bmp2.PixelFormat == System.Drawing.Imaging.PixelFormat.Format24bppRgb) { tProgress.Text = "Gathering frames..."; GifBitmapEncoder generatedWyMerge = GenerateWyMerge(bmp1, bmp2, tbFrames.Value, tbThreshold.Value); SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "GIF Image (*.gif)|*.gif"; sfd.Title = "Save " + generatedWyMerge.Frames.Count + " frame WyMerge"; if (sfd.ShowDialog() == DialogResult.OK) { FileStream stream = (FileStream)sfd.OpenFile(); generatedWyMerge.Save(stream); stream.Close(); } } else { MessageBox.Show("WyMerge currently only supports 24-bit RGB bitmaps.\n\nBitmap 1: " + bmp1.PixelFormat.ToString() + "\nBitmap 2: " + bmp2.PixelFormat.ToString(), "Whoops..."); } } else { MessageBox.Show("Both bitmaps need to be the same dimensions, else the WyMerge can\'t generate!\n\nBitmap 1: " + bmp1.Width + " x " + bmp1.Height + "\nBitmap 2: " + bmp2.Width + " x " + bmp2.Height, "Whoops..."); } } else { MessageBox.Show("Both bitmaps need to be loaded before generating a WyMerge!", "Whoops..."); } }
private void OnExportMovie() { var saveDialog = new SaveFileDialog() { Filter = "Gif Files|*.gif", AddExtension = true, OverwritePrompt = true, ValidateNames = true }; if (saveDialog.ShowDialog() == true) { var frames = new List <WriteableBitmap>(this.Frames); var path = saveDialog.FileName; ThreadPool.QueueUserWorkItem(_ => { var encoder = new GifBitmapEncoder(); foreach (var frame in frames) { var bitmapFrame = BitmapFrame.Create(frame); encoder.Frames.Add(bitmapFrame); } using (var file = File.OpenWrite(path)) { encoder.Save(file); } }); } }