private static void SaveImage(JobInfo info, Bitmap bitmap) { if (info == null || bitmap == null) { throw new ArgumentNullException(); } try { if ((info.ImageDestinations & ImageDestinations.Clipboard) == ImageDestinations.Clipboard) { while (!CopyToClipboard(bitmap)) { if (Goletas.ScreenCapture.MessageBox.Show(null, ApplicationManager.GetString("ImageToClipboardFailed"), MessageBoxButtons.RetryCancel, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) == DialogResult.Cancel) { break; } } } if ((info.ImageDestinations & ImageDestinations.File) == ImageDestinations.File) { string filePath = GetFilePath(info); FileType renderer = info.FileType; bool forceSelectFile = false; Goletas.Win32.SaveFileDialog dialog = null; do { bool overwriteFile = info.UseFileOverwrite; if (forceSelectFile || filePath.Length == 0 || (File.Exists(filePath) && (((File.GetAttributes(filePath) & (FileAttributes.ReadOnly | FileAttributes.System)) != (FileAttributes)0) || !overwriteFile))) { if (dialog == null) { dialog = new Goletas.Win32.SaveFileDialog(); dialog.Title = ApplicationManager.GetString("SaveImageAs"); dialog.InitialDirectory = (filePath.Length != 0) ? info.WorkingDirectory : Environment.GetFolderPath(Environment.SpecialFolder.MyPictures); dialog.DefaultExtension = renderer.Extensions[0]; dialog.FileName = "*." + dialog.DefaultExtension; dialog.FilterIndex = Configuration.Current.FileTypes.IndexOf(renderer.FormatId) + 1; } dialog.Filter = Configuration.Current.FileTypes.GetTypeFilter(); if (!dialog.ShowDialog(IntPtr.Zero)) { return; } renderer = Configuration.Current.FileTypes[dialog.FilterIndex - 1]; filePath = dialog.FileName; if (File.Exists(filePath)) { overwriteFile = true; } } try { using (FileStream output = new FileStream(filePath, overwriteFile ? FileMode.Create : FileMode.CreateNew, FileAccess.Write, FileShare.None, 8 * 1024, FileOptions.None)) { renderer.Save(bitmap, output); bitmap.Dispose(); break; } } catch (UnauthorizedAccessException) { } catch (IOException) { } forceSelectFile = true; }while (true); if (info.ExternalApp.Length != 0) { if (!(File.Exists(info.ExternalApp) && StartExternalApp(info.ExternalApp, "\"" + filePath + "\""))) { Goletas.ScreenCapture.MessageBox.Show(null, ApplicationManager.GetString("ExternalAppNotExecuted"), MessageBoxIcon.Exclamation); } } } } finally { bitmap.Dispose(); } }
private static void SaveImage(JobInfo info, Bitmap bitmap) { if (info == null || bitmap == null) { throw new ArgumentNullException(); } try { if ((info.ImageDestinations & ImageDestinations.Clipboard) == ImageDestinations.Clipboard) { while (!CopyToClipboard(bitmap)) { if (Goletas.ScreenCapture.MessageBox.Show(null, ApplicationManager.GetString("ImageToClipboardFailed"), MessageBoxButtons.RetryCancel, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) == DialogResult.Cancel) { break; } } } if ((info.ImageDestinations & ImageDestinations.File) == ImageDestinations.File) { string filePath = GetFilePath(info); FileType renderer = info.FileType; bool forceSelectFile = false; Goletas.Win32.SaveFileDialog dialog = null; do { bool overwriteFile = info.UseFileOverwrite; if (forceSelectFile || filePath.Length == 0 || (File.Exists(filePath) && (((File.GetAttributes(filePath) & (FileAttributes.ReadOnly | FileAttributes.System)) != (FileAttributes)0) || !overwriteFile))) { if (dialog == null) { dialog = new Goletas.Win32.SaveFileDialog(); dialog.Title = ApplicationManager.GetString("SaveImageAs"); dialog.InitialDirectory = (filePath.Length != 0) ? info.WorkingDirectory : Environment.GetFolderPath(Environment.SpecialFolder.MyPictures); dialog.DefaultExtension = renderer.Extensions[0]; dialog.FileName = "*." + dialog.DefaultExtension; dialog.FilterIndex = Configuration.Current.FileTypes.IndexOf(renderer.FormatId) + 1; } dialog.Filter = Configuration.Current.FileTypes.GetTypeFilter(); if (!dialog.ShowDialog(IntPtr.Zero)) { return; } renderer = Configuration.Current.FileTypes[dialog.FilterIndex - 1]; filePath = dialog.FileName; if (File.Exists(filePath)) { overwriteFile = true; } } try { using (FileStream output = new FileStream(filePath, overwriteFile ? FileMode.Create : FileMode.CreateNew, FileAccess.Write, FileShare.None, 8 * 1024, FileOptions.None)) { renderer.Save(bitmap, output); bitmap.Dispose(); break; } } catch (UnauthorizedAccessException) { } catch (IOException) { } forceSelectFile = true; } while (true); if (info.ExternalApp.Length != 0) { if (!(File.Exists(info.ExternalApp) && StartExternalApp(info.ExternalApp, "\"" + filePath + "\""))) { Goletas.ScreenCapture.MessageBox.Show(null, ApplicationManager.GetString("ExternalAppNotExecuted"), MessageBoxIcon.Exclamation); } } } } finally { bitmap.Dispose(); } }