public static Image StaticTakeScreenshot(String MovieURL, Size Size, int FrameNum = 0, FlashScaleMode ScaleMode = FlashScaleMode.showAll, Color? BackgroundColor = null) { var flash = new ExAxShockwaveFlash(); //IFormatter formatter = new BinaryFormatter(); //var state = (AxHost.State)formatter.Deserialize(new MemoryStream(OcxData)); //Console.WriteLine(state); if (!File.Exists(MovieURL)) throw(new Exception("Flash Movie '" + MovieURL + "' doesn't exists.")); String Hash = "ExAxShockwaveFlashCache_" + MD5Hex(MovieURL) + "_" + MD5Hex(File.GetLastWriteTimeUtc(MovieURL).ToString()) + "_" + Size.Width + "x" + Size.Height + "_" + FrameNum + "_" + ScaleMode + "_" + MD5Hex(BackgroundColor.ToString()); String CacheTempFile = Path.GetTempPath() + @"\" + Hash + ".bmp"; if (File.Exists(CacheTempFile)) { return Image.FromFile(CacheTempFile); } var tempForm = new Form(); tempForm.BackColor = Color.White; flash.BeginInit(); { tempForm.Controls.Add(flash); flash.Size = Size; //flash.Visible = false; } flash.EndInit(); //flash.PreferredSize = Size; flash.LoadMovie(0, MovieURL); flash.Size = Size; flash.Quality = 1; flash.GotoFrame(FrameNum); flash.ScaleMode = (int)ScaleMode; //flash.BGColor = "ffffff"; if (BackgroundColor.HasValue) { //Console.WriteLine(BackgroundColor); //Console.WriteLine(BackgroundColor.Value.R); //flash.BGColor = "ffffff"; //flash.WMode = "Window"; //flash.BackColor = Color.White; //flash.BackgroundColor = BackgroundColor.Value.ToArgb(); flash.BackgroundColor = (BackgroundColor.Value.R << 0) | (BackgroundColor.Value.G << 8) | (BackgroundColor.Value.B << 16); } else { flash.WMode = "Transparent"; //Console.WriteLine("Transparent"); } //Thread.Sleep(20); Bitmap Screenshot = flash.TakeScreenshot(Size); flash.Dispose(); tempForm.Dispose(); Screenshot.Save(CacheTempFile); return Screenshot; }