コード例 #1
0
        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();
            }
        }
コード例 #2
0
ファイル: JobManager.cs プロジェクト: Goletas/screencapture
        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();
            }
        }