private void OnConsoleDataRecv(object sender, DataReceivedEventArgs e)
 {
     if (!String.IsNullOrEmpty(e.Data))
     {
         console_buffer.Append(e.Data);
         console_buffer.Append(Environment.NewLine);
         // if (queueFlag) return;
         // queueFlag = true;
         Dispatcher.BeginInvoke(new Action(delegate
         {
             // queueFlag = false;
             CLIOutput.Focus();
             this.CLIOutput.AppendText(e.Data);
             this.CLIOutput.AppendText(Environment.NewLine);
             CLIOutput.Select(CLIOutput.Text.Length, 0);
         }), System.Windows.Threading.DispatcherPriority.ApplicationIdle, null);
     }
 }
        private void OnRun(object sender, RoutedEventArgs e)
        {
            if (!File.Exists("waifu2x-ncnn-vulkan.exe"))
            {
                MessageBox.Show(@"waifu2x-ncnn-vulkan.exe is missing!");
                return;
            }

            if (param_src == null)
            {
                MessageBox.Show(@"source images is not found!");
                return;
            }

            // Sets Source
            // The source must be a file or folder that exists
            if (System.Text.RegularExpressions.Regex.IsMatch(
                    txtGPU_ID.Text,
                    @"^(\d+)$",
                    System.Text.RegularExpressions.RegexOptions.ECMAScript))
            {
                param_gpu_id.Clear();
                param_gpu_id.Append("-g ");
                param_gpu_id.Append(txtGPU_ID.Text);
            }
            else
            {
                param_gpu_id.Clear();
            }

            if (System.Text.RegularExpressions.Regex.IsMatch(
                    txtBlocksize.Text,
                    @"^(\d+)$",
                    System.Text.RegularExpressions.RegexOptions.ECMAScript))
            {
                if (int.Parse(txtBlocksize.Text) % 4 != 0)
                {
                    MessageBox.Show(@"Block size must be a multiple of 4");
                    return;
                }
                else
                {
                    param_block.Clear();
                    param_block.Append("-t ");
                    param_block.Append(txtBlocksize.Text);
                }
            }
            else
            {
                param_block.Clear();
            }

            if (((int)slider_zoom.Value & ((int)slider_zoom.Value - 1)) != 0)
            {
                MessageBox.Show(@"Magnification must be a power of two.");
                return;
            }

            if (System.Text.RegularExpressions.Regex.IsMatch(
                    txtThread.Text,
                    @"^(\d+:\d+:\d+)$",
                    System.Text.RegularExpressions.RegexOptions.ECMAScript))
            {
                param_thread.Clear();
                param_thread.Append("-j ");
                param_thread.Append(txtThread.Text);
            }
            else
            {
                param_thread.Clear();
            }

            binary_path.Clear();
            if (checkPrecision_fp32.IsChecked == true)
            {
                binary_path.Append(".\\fp32\\waifu2x-ncnn-vulkan.exe ");
            }
            else
            {
                binary_path.Append(".\\waifu2x-ncnn-vulkan.exe ");
            }

            // logをクリアする
            this.CLIOutput.Clear();
            if (this.txtDstPath.Text.Trim() != "")
            {
                if (Directory.Exists(this.txtDstPath.Text) == false)
                {
                    try
                    {
                        Directory.CreateDirectory(this.txtDstPath.Text);
                    }
                    catch (Exception)
                    {
                        MessageBox.Show(@"Failed to create output destination folder.");
                        return;
                    }
                }
            }
            Commandline.Clear();
            int FileCount = 0;

            for (int i = 0; i < param_src.Length; i++)
            {
                FileCount++;
            }
            Commandline.Append("@echo off\r\n");
            Commandline.Append("chcp 65001 >nul\r\n");
            Commandline.Append("if \"%~1\"==\"sub_rename\" goto sub_rename\r\n");
            Commandline.Append("set \"FileCount=" + FileCount + "\"\r\n");
            Commandline.Append("set \"ProcessedCount=0\"\r\n");
            Commandline.Append("set \"mode=" + param_mode.ToString() + "\"\r\n");
            Commandline.Append("set \"Scale_ratio=" + this.slider_zoom.Value.ToString() + "\"\r\n");
            Commandline.Append("if \"%mode%\"==\"noise\" set Scale_ratio=1\r\n");
            Commandline.Append("set \"Output_no_overwirit=" + checkOutput_no_overwirit.IsChecked.ToString() + "\"\r\n");
            Commandline.Append("set \"Prevent_double_extensions=" + checkPrevent_double_extensions.IsChecked.ToString() + "\"\r\n");
            Commandline.Append("if not \"%FileCount%\"==\"1\" echo progress %ProcessedCount%/%FileCount%\r\n");
            for (int i = 0; i < param_src.Length; i++)
            {
                param_dst.Clear();
                if (this.txtDstPath.Text.Trim() != "")
                {
                    param_dst.Append("\"");
                    param_dst.Append(this.txtDstPath.Text);
                    param_dst.Append("\\");
                    param_dst.Append(System.IO.Path.GetFileNameWithoutExtension(param_src[i].Replace("%", "%%%%")));
                    if (File.Exists(param_src[i]))
                    {
                        param_dst.Append(".png\"");
                    }
                    else if (Directory.Exists(param_src[i]))
                    {
                        param_dst.Append("\"");
                    }
                }
                else
                {
                    param_dst.Append("\"");
                    System.IO.DirectoryInfo hDirInfo = System.IO.Directory.GetParent(param_src[i]);
                    param_dst.Append(hDirInfo.FullName);
                    param_dst.Append("\\");
                    param_dst.Append(System.IO.Path.GetFileNameWithoutExtension(param_src[i].Replace("%", "%%%%")));
                    if (param_model.ToString().Replace("-m ", "") == "models-cunet")
                    {
                        param_dst.Append("(CUnet)");
                    }
                    if (param_model.ToString().Replace("-m ", "") == "models-upconv_7_anime_style_art_rgb")
                    {
                        param_dst.Append("(UpRGB)");
                    }
                    if (param_model.ToString().Replace("-m ", "") == "models-upconv_7_photo")
                    {
                        param_dst.Append("(UpPhoto)");
                    }
                    param_dst.Append("(");
                    param_dst.Append(param_mode.ToString().Replace("-m ", ""));
                    param_dst.Append(")");
                    if (param_mode.ToString() == "noise" || param_mode.ToString() == "noise_scale" || param_mode.ToString() == "auto_scale")
                    {
                        param_dst.Append("(");
                        param_dst.Append("Level");
                        param_dst.Append(param_denoise.ToString());
                        param_dst.Append(")");
                    }

                    if (param_mode.ToString() == "scale" || param_mode.ToString() == "noise_scale" || param_mode.ToString() == "auto_scale")
                    {
                        param_dst.Append("(x");
                        param_dst.Append(this.slider_zoom.Value.ToString());
                        param_dst.Append(")");
                    }
                    if (File.Exists(param_src[i]))
                    {
                        param_dst.Append(".png\"");
                    }
                    else if (Directory.Exists(param_src[i]))
                    {
                        param_dst.Append("\"");
                    }
                }
                param_mag.Clear();
                param_mag.Append("-s ");
                param_mag.Append(this.slider_value.Text);

                param_denoise2.Clear();
                param_denoise2.Append(param_denoise.ToString());

                // Set mode
                if (param_mode.ToString() == "noise")
                {
                    param_mag.Clear();
                    param_mag.Append("-s ");
                    param_mag.Append("1");
                }
                if (param_mode.ToString() == "scale")
                {
                    param_denoise2.Clear();
                    param_denoise2.Append("-1");
                }

                Commandline.Append("call :waifu2x_run " + "\"" + param_src[i].Replace("%", "%%%%") + "\" " + param_dst + "\r\n");
            }
            string full_param = String.Join(" ",
                                            "-v ",
                                            "-i \"%~1\"",
                                            "-o \"%~2\"",
                                            param_mag.ToString(),
                                            "-n %noise_level%",
                                            param_block.ToString(),
                                            param_model.ToString(),
                                            param_gpu_id.ToString(),
                                            param_thread.ToString());

            string multiple_full_param = String.Join(" ",
                                                     "-v ",
                                                     "-i %Temporary_input%",
                                                     "-o %Temporary_output%",
                                                     "-s 2",
                                                     "-n %Temporary_noise_level%",
                                                     param_block.ToString(),
                                                     param_model.ToString(),
                                                     param_gpu_id.ToString(),
                                                     param_thread.ToString());

            Guid g = System.Guid.NewGuid();

            random32.Clear();
            random32.Append(g.ToString("N").Substring(0, 32));

            Commandline.Append("exit /b\r\n");
            Commandline.Append("\r\n");
            Commandline.Append(":waifu2x_run\r\n");
            Commandline.Append("for %%i in (\"%~2\") do set \"Source_name=%%~ni\"\r\n");
            Commandline.Append("if \"%Output_no_overwirit%\"==\"True\" if exist \"%~2\" goto waifu2x_run_skip\r\n");
            Commandline.Append("set \"noise_level=" + param_denoise2 + "\"\r\n");
            Commandline.Append("if \"" + param_mode.ToString() + "\"==\"auto_scale\" if not \"%input_image_jpg%\"==\"1\" set \"noise_level=-1\"\r\n");
            Commandline.Append("for %%i in (\"%~1\") do set \"Attribute=%%~ai\"\r\n");
            Commandline.Append("if %Scale_ratio% LEQ 2 if \"%Attribute:~0,1%\"==\"d\" if not exist \"%~2\" (\r\n");
            Commandline.Append("   echo mkdir \"%~2\"\r\n");
            Commandline.Append("   mkdir \"%~2\"\r\n");
            Commandline.Append(")\r\n");
            Commandline.Append("set Temporary_input=\"%~1\"\r\n");
            Commandline.Append("if %Scale_ratio% GTR 2 (\r\n");
            Commandline.Append("    for /L %%i in (2,2,%Scale_ratio%) do (\r\n");
            Commandline.Append("        call :sub_multiple_magnify %%i\r\n");
            Commandline.Append("    )\r\n");
            Commandline.Append(") else (\r\n");
            Commandline.Append("    echo " + binary_path + full_param + "\r\n");
            Commandline.Append("    " + binary_path + full_param + "\r\n");
            Commandline.Append(")\r\n");
            Commandline.Append("if %Scale_ratio% LEQ 2 if \"%Attribute:~0,1%\"==\"d\" if \"%Prevent_double_extensions%\"==\"True\" (\r\n");
            Commandline.Append("    pushd \"%~2\"\r\n");
            Commandline.Append("    PowerShell \"Get-ChildItem *.png | Rename-Item -NewName { $_.Name -replace '(.png.png|.jpg.png|.jpeg.png|.bmp.png|.gif.png|.tif.png|.tiff.png|.webp.png)$','.png' }\"\r\n");
            Commandline.Append("    popd\r\n");
            Commandline.Append(")\r\n");
            Commandline.Append("if %Scale_ratio% GTR 2 (\r\n");
            Commandline.Append("    move /y %Temporary_output% \"%~2\" >nul 2>&1\r\n");
            Commandline.Append("    rd /s /q \"%TEMP%\\" + random32.ToString() + "\\\"\r\n");
            Commandline.Append(")\r\n");
            Commandline.Append(":waifu2x_run_skip\r\n");
            Commandline.Append("set /a ProcessedCount=%ProcessedCount%+1\r\n");
            Commandline.Append("if not \"%FileCount%\"==\"1\" echo progress %ProcessedCount%/%FileCount%\r\n");
            Commandline.Append("exit /b\r\n");
            Commandline.Append("\r\n");
            Commandline.Append(":sub_multiple_magnify\r\n");
            Commandline.Append("for %%i in (2,4,8,16,32,64,128,256) do if \"%~1\"==\"%%i\" goto sub_multiple_magnify2\r\n");
            Commandline.Append("exit /b\r\n");
            Commandline.Append(":sub_multiple_magnify2\r\n");
            Commandline.Append("set Temporary_output=\"%TEMP%\\" + random32.ToString() + "\\%Source_name%_x%~1.png\"\r\n");
            Commandline.Append("if \"%Attribute:~0,1%\"==\"d\" set Temporary_output=\"%TEMP%\\" + random32.ToString() + "\\%Source_name%_x%~1\"\r\n");
            Commandline.Append("if \"%Attribute:~0,1%\"==\"d\" mkdir %Temporary_output%\r\n");
            Commandline.Append("if not \"%Attribute:~0,1%\"==\"d\" if not exist \"%TEMP%\\" + random32.ToString() + "\\\" mkdir \"%TEMP%\\" + random32.ToString() + "\\\"\r\n");
            Commandline.Append("set Temporary_noise_level=-1\r\n");
            Commandline.Append("if \"%~1\"==\"2\" if not \"%noise_level%\"==\"-1\" set \"Temporary_noise_level=%noise_level%\"\r\n");
            Commandline.Append("echo " + binary_path + multiple_full_param + "\r\n");
            Commandline.Append(binary_path + multiple_full_param + "\r\n");
            Commandline.Append("if \"%Attribute:~0,1%\"==\"d\" if \"%Prevent_double_extensions%\"==\"True\" (\r\n");
            Commandline.Append("    pushd %Temporary_output%\r\n");
            Commandline.Append("    PowerShell \"Get-ChildItem *.png | Rename-Item -NewName { $_.Name -replace '(.png.png|.jpg.png|.jpeg.png|.bmp.png|.gif.png|.tif.png|.tiff.png|.webp.png)$','.png' }\"\r\n");
            Commandline.Append("    popd\r\n");
            Commandline.Append(")\r\n");
            Commandline.Append("set Temporary_input=%Temporary_output%\r\n");
            Commandline.Append("exit /b\r\n");
            waifu2x_bat.Clear();
            waifu2x_bat.Append(System.IO.Path.GetTempPath() + "waifu2x_" + random32.ToString() + ".bat");

            System.IO.StreamWriter sw = new System.IO.StreamWriter(
                @waifu2x_bat.ToString(),
                false
                // ,
                // System.Text.Encoding.GetEncoding("utf-8")
                );
            sw.Write(Commandline);
            sw.Close();

            this.btnRun.IsEnabled   = false;
            this.btnAbort.IsEnabled = true;

            // Setup ProcessStartInfo
            psinfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
            psinfo.StandardErrorEncoding  = Encoding.UTF8;
            psinfo.StandardOutputEncoding = Encoding.UTF8;
            psinfo.Arguments              = "/c \"" + waifu2x_bat.ToString() + "\"";
            psinfo.RedirectStandardInput  = true;
            psinfo.RedirectStandardError  = true;
            psinfo.RedirectStandardOutput = true;
            psinfo.UseShellExecute        = false;
            psinfo.WorkingDirectory       = System.AppDomain.CurrentDomain.BaseDirectory;
            psinfo.CreateNoWindow         = true;
            psinfo.WindowStyle            = ProcessWindowStyle.Hidden;
            pHandle.StartInfo             = psinfo;
            pHandle.EnableRaisingEvents   = true;
            if (EventHandler_Flag == false)
            {
                pHandle.OutputDataReceived += new DataReceivedEventHandler(OnConsoleDataRecv);
                pHandle.ErrorDataReceived  += new DataReceivedEventHandler(OnConsoleDataRecv);
                pHandle.Exited             += new EventHandler(OnProcessExit);
                EventHandler_Flag           = true;
            }

            // Starts working
            console_buffer.Clear();

            try
            {
                //MessageBox.Show(full_param);
                bool pState = pHandle.Start();
            }
            catch (Exception)
            {
                try
                {
                    pHandle.Kill();
                }
                catch (Exception) { /*Nothing*/ }
                Errormessage("Failed to start waifu2x.exe.");
                //throw;
            }

            Dispatcher.BeginInvoke(new Action(delegate
            {
                CLIOutput.Focus();
                // this.CLIOutput.AppendText("waifu2x.exe " + full_param.ToString());
                // this.CLIOutput.AppendText(Environment.NewLine);
                // this.CLIOutput.AppendText(Environment.NewLine);
                CLIOutput.Select(CLIOutput.Text.Length, 0);
            }), System.Windows.Threading.DispatcherPriority.ApplicationIdle, null);

            try
            {
                pHandle.BeginOutputReadLine();
            }
            catch (Exception)
            {
                this.CLIOutput.Clear();
                this.CLIOutput.Text = "BeginOutputReadLine crashed...\n";
            }

            try
            {
                pHandle.BeginErrorReadLine();
            }
            catch (Exception)
            {
                this.CLIOutput.Clear();
                this.CLIOutput.Text = "BeginErrorReadLine crashed...\n";
            }

            //pHandle.BeginErrorReadLine();
            //MessageBox.Show("Some parameters do not mix well and crashed...");

            //pHandle.WaitForExit();

            /*
             * pHandle.CancelOutputRead();
             * pHandle.Close();
             * this.btnAbort.IsEnabled = false;
             * this.btnRun.IsEnabled = true;
             * this.CLIOutput.Text = console_buffer.ToString();
             */
        }
Пример #3
0
        private void OnRun(object sender, RoutedEventArgs e)
        {
            if (!File.Exists("waifu2x.exe"))
            {
                MessageBox.Show(@"waifu2x.exe is missing!");
                return;
            }
            // Sets Source
            // The source must be a file or folder that exists
            if (File.Exists(this.txtSrcPath.Text) || Directory.Exists(this.txtSrcPath.Text))
            {
                if (this.txtSrcPath.Text.Trim() == "") //When source path is empty, replace with current folder
                {
                    param_src.Clear();
                    // param_src.Append("-i ");
                    param_src.Append("\"");
                    param_src.Append(App.directory);
                    param_src.Append("\"");
                }
                else
                {
                    param_src.Clear();
                    // param_src.Append("-i ");
                    param_src.Append("\"");
                    param_src.Append(this.txtSrcPath.Text);
                    param_src.Append("\"");
                }
            }
            else
            {
                Errormessage(@"The source folder or file does not exists!");
                return;
            }

            param_mag.Clear();
            // param_mag.Append("-s ");
            param_mag.Append(this.slider_value.Text);

            // 数字が入力されてなかったらクリアする

            // logをクリアする
            this.CLIOutput.Clear();

            // Set Destination
            if (this.txtDstPath.Text.Trim() == "")
            {
                param_dst.Clear();
                param_dst.Append("\"");
                System.IO.DirectoryInfo hDirInfo = System.IO.Directory.GetParent(this.txtSrcPath.Text);
                param_dst.Append(hDirInfo.FullName);
                param_dst.Append("\\");
                param_dst.Append(System.IO.Path.GetFileNameWithoutExtension(this.txtSrcPath.Text));
                param_dst.Append("(CUnet)");
                param_dst.Append("(");
                param_dst.Append(param_mode.ToString().Replace("-m ", ""));
                param_dst.Append(")");
                if (param_mode.ToString() == "-m noise" || param_mode.ToString() == "-m noise_scale")
                {
                    param_dst.Append("(");
                    param_dst.Append("Level");
                    param_dst.Append(param_denoise.ToString());
                    param_dst.Append(")");
                }
                if (param_mode.ToString() == "-m scale" || param_mode.ToString() == "-m noise_scale")
                {
                    param_dst.Append("(x");
                    param_dst.Append(this.slider_zoom.Value.ToString());
                    param_dst.Append(")");
                }
                param_dst.Append(".png\"");
            }
            else
            {
                param_dst.Clear();
                param_dst.Append("\"");
                param_dst.Append(this.txtDstPath.Text);
                param_dst.Append("\"");
            }

            // Set input format
            // param_informat.Clear();
            //param_informat.Append("-l ");
            // param_informat.Append(this.txtExt.Text);
            //param_informat.Append(@":");
            //param_informat.Append(this.txtExt.Text.ToUpper());

            // Set output format
            //param_outformat.Clear();
            //param_outformat.Append("-e ");
            //param_outformat.Append(this.txtOExt.Text);

            // Set scale ratio

            param_denoise2.Clear();
            param_denoise2.Append(param_denoise.ToString());

            // Set mode
            if (param_mode.ToString() == "-m noise")
            {
                param_mag.Clear();
                param_mag.Append("1");
            }
            if (param_mode.ToString() == "-m scale")
            {
                param_denoise2.Clear();
                param_denoise2.Append("-1");
            }

            this.btnRun.IsEnabled   = false;
            this.btnAbort.IsEnabled = true;

            // Assemble parameters
            string full_param = String.Join(" ",
                                            param_src.ToString(),
                                            param_dst.ToString(),
                                            // param_informat.ToString(),
                                            // param_mode.ToString(),
                                            param_denoise2.ToString(),
                                            param_mag.ToString()
                                            // param_block.ToString(),
                                            );

            // Setup ProcessStartInfo
            psinfo.FileName               = "waifu2x.exe";
            psinfo.Arguments              = full_param;
            psinfo.RedirectStandardError  = true;
            psinfo.RedirectStandardOutput = true;
            psinfo.UseShellExecute        = false;
            psinfo.WorkingDirectory       = System.AppDomain.CurrentDomain.BaseDirectory;
            psinfo.CreateNoWindow         = true;
            psinfo.WindowStyle            = ProcessWindowStyle.Hidden;
            pHandle.StartInfo             = psinfo;
            pHandle.EnableRaisingEvents   = true;
            if (EventHandler_Flag == false)
            {
                pHandle.OutputDataReceived += new DataReceivedEventHandler(OnConsoleDataRecv);
                pHandle.ErrorDataReceived  += new DataReceivedEventHandler(OnConsoleDataRecv);
                pHandle.Exited             += new EventHandler(OnProcessExit);
                EventHandler_Flag           = true;
            }

            // Starts working
            console_buffer.Clear();

            try
            {
                //MessageBox.Show(full_param);
                bool pState = pHandle.Start();
            }
            catch (Exception)
            {
                try
                {
                    pHandle.Kill();
                }
                catch (Exception) { /*Nothing*/ }
                Errormessage("Failed to start waifu2x.exe.");
                //throw;
            }

            Dispatcher.BeginInvoke(new Action(delegate
            {
                CLIOutput.Focus();
                this.CLIOutput.AppendText("waifu2x.exe " + full_param.ToString());
                this.CLIOutput.AppendText(Environment.NewLine);
                this.CLIOutput.AppendText(Environment.NewLine);
                CLIOutput.Select(CLIOutput.Text.Length, 0);
            }), System.Windows.Threading.DispatcherPriority.ApplicationIdle, null);

            try
            {
                pHandle.BeginOutputReadLine();
            }
            catch (Exception)
            {
                this.CLIOutput.Clear();
                this.CLIOutput.Text = "BeginOutputReadLine crashed...\n";
            }

            try
            {
                pHandle.BeginErrorReadLine();
            }
            catch (Exception)
            {
                this.CLIOutput.Clear();
                this.CLIOutput.Text = "BeginErrorReadLine crashed...\n";
            }

            //pHandle.BeginErrorReadLine();
            //MessageBox.Show("Some parameters do not mix well and crashed...");

            //pHandle.WaitForExit();

            /*
             * pHandle.CancelOutputRead();
             * pHandle.Close();
             * this.btnAbort.IsEnabled = false;
             * this.btnRun.IsEnabled = true;
             * this.CLIOutput.Text = console_buffer.ToString();
             */
        }
Пример #4
0
        private void OnRun(object sender, RoutedEventArgs e)
        {
            // Sets Source
            // The source must be a file or folder that exists
            if (File.Exists(this.txtSrcPath.Text) || Directory.Exists(this.txtSrcPath.Text))
            {
                if (this.txtSrcPath.Text.Trim() == "") //When source path is empty, replace with current folder
                {
                    param_src.Clear();
                    param_src.Append("-i ");
                    param_src.Append("\"");
                    param_src.Append(App.directory);
                    param_src.Append("\"");
                }
                else
                {
                    param_src.Clear();
                    param_src.Append("-i ");
                    param_src.Append("\"");
                    param_src.Append(this.txtSrcPath.Text);
                    param_src.Append("\"");
                    param_WorkingDirectory.Clear();
                    if (Directory.Exists(this.txtSrcPath.Text))
                    {
                        param_WorkingDirectory.Append(this.txtSrcPath.Text);
                    }
                    if (File.Exists(this.txtSrcPath.Text))
                    {
                        System.IO.DirectoryInfo hDirInfo = System.IO.Directory.GetParent(this.txtSrcPath.Text);
                        param_WorkingDirectory.Append(hDirInfo);
                    }
                }
            }
            else
            {
                Errormessage(@"The source folder or file does not exists!");
                return;
            }


            // waifu2x-chainerのパスを設定する
            param_waifu2x_chainer_path.Clear();
            if (File.Exists(this.txtWaifu2x_chainerPath.Text + "\\waifu2x.py"))
            {
                param_waifu2x_chainer_path.Append("\"" + this.txtWaifu2x_chainerPath.Text + "\\waifu2x.py\"");
            }
            else
            {
                Errormessage("waifu2x-chainer folder is missing!");
                return;
            }

            // モデルフォルダを決定する
            param_model.Clear();
            if (param_arch.ToString().Trim() == "-a 0")
            {
                param_model.Append("-d \"" + this.txtWaifu2x_chainerPath.Text + "\\models\\vgg7\"");
            }
            if (param_arch.ToString().Trim() == "-a 1")
            {
                param_model.Append("-d \"" + this.txtWaifu2x_chainerPath.Text + "\\models\\upconv7\"");
            }
            if (param_arch.ToString().Trim() == "-a 2")
            {
                param_model.Append("-d \"" + this.txtWaifu2x_chainerPath.Text + "\\models\\resnet10\"");
            }
            if (param_arch.ToString().Trim() == "-a 3")
            {
                param_model.Append("-d \"" + this.txtWaifu2x_chainerPath.Text + "\\models\\upresnet10\"");
            }

            param_color.Clear();
            param_color.Append("-c " + ComboColor_Mode.SelectedValue.ToString().ToLowerInvariant());

            param_mag.Clear();
            param_mag.Append("-s ");
            param_mag.Append(this.slider_value.Text);

            // 数字が入力されてなかったらクリアする

            param_width.Clear();
            if (!System.Text.RegularExpressions.Regex.IsMatch(
                    output_width.Text,
                    @"^\d+$",
                    System.Text.RegularExpressions.RegexOptions.ECMAScript))
            {
                output_width.Clear();
            }
            else
            {
                param_mag.Clear();
                param_width.Append("-W " + this.output_width.Text);
            }

            param_height.Clear();
            if (!System.Text.RegularExpressions.Regex.IsMatch(
                    output_height.Text,
                    @"^\d+$",
                    System.Text.RegularExpressions.RegexOptions.ECMAScript))
            {
                output_height.Clear();
            }
            else
            {
                param_mag.Clear();
                param_height.Append("-H " + this.output_height.Text);
            }

            if (System.Text.RegularExpressions.Regex.IsMatch(
                    txtDevice.Text,
                    @"^(\d+)$",
                    System.Text.RegularExpressions.RegexOptions.ECMAScript))
            {
                param_device.Clear();
                param_device.Append("-g ");
                param_device.Append(txtDevice.Text);
            }
            else
            {
                param_device.Clear();
            }

            param_tta.Clear();
            if (cbTTA.IsChecked == true)
            {
                param_tta.Append("-t -T ");
                param_tta.Append(ComboTTA_level.SelectedValue.ToString());
            }

            // logをクリアする
            this.CLIOutput.Clear();

            // Set Destination
            if (this.txtDstPath.Text.Trim() == "")
            {
                param_dst.Clear();
            }
            else
            {
                param_dst.Clear();
                param_dst.Append("-o ");
                param_dst.Append("\"");
                param_dst.Append(this.txtDstPath.Text);
                param_dst.Append("\"");
            }

            // Set input format
            // param_informat.Clear();
            //param_informat.Append("-l ");
            // param_informat.Append(this.txtExt.Text);
            //param_informat.Append(@":");
            //param_informat.Append(this.txtExt.Text.ToUpper());

            // Set output format
            //param_outformat.Clear();
            //param_outformat.Append("-e ");
            //param_outformat.Append(this.txtOExt.Text);

            // Set scale ratio

            param_denoise2.Clear();
            param_denoise2.Append(param_denoise.ToString());

            // Set mode
            if (param_mode.ToString() == "-m noise")
            {
                param_width.Clear();
                param_height.Clear();
                param_mag.Clear();
            }
            if (param_mode.ToString() == "-m scale")
            {
                param_denoise2.Clear();
            }

            this.btnRun.IsEnabled   = false;
            this.btnAbort.IsEnabled = true;

            // Assemble parameters
            string full_param = String.Join(" ", param_waifu2x_chainer_path.ToString(),
                                            param_src.ToString(),
                                            param_dst.ToString(),
                                            // param_informat.ToString(),
                                            // param_outformat.ToString(),
                                            param_mode.ToString(),
                                            param_mag.ToString(),
                                            param_width.ToString(),
                                            param_height.ToString(),
                                            param_denoise2.ToString(),
                                            param_arch.ToString(),
                                            param_model.ToString(),
                                            param_color.ToString(),
                                            param_block.ToString(),
                                            param_batch.ToString(),
                                            param_device.ToString(),
                                            param_tta.ToString());

            // Setup ProcessStartInfo
            psinfo.FileName               = "python";
            psinfo.Arguments              = full_param;
            psinfo.RedirectStandardError  = true;
            psinfo.RedirectStandardOutput = true;
            psinfo.UseShellExecute        = false;
            psinfo.WorkingDirectory       = param_WorkingDirectory.ToString();
            psinfo.CreateNoWindow         = true;
            psinfo.WindowStyle            = ProcessWindowStyle.Hidden;
            pHandle.StartInfo             = psinfo;
            pHandle.EnableRaisingEvents   = true;
            if (EventHandler_Flag == false)
            {
                pHandle.OutputDataReceived += new DataReceivedEventHandler(OnConsoleDataRecv);
                pHandle.ErrorDataReceived  += new DataReceivedEventHandler(OnConsoleDataRecv);
                pHandle.Exited             += new EventHandler(OnProcessExit);
                EventHandler_Flag           = true;
            }

            // Starts working
            console_buffer.Clear();

            try
            {
                //MessageBox.Show(full_param);
                bool pState = pHandle.Start();
            }
            catch (Exception)
            {
                try
                {
                    pHandle.Kill();
                }
                catch (Exception) { /*Nothing*/ }
                Errormessage("Failed to start Python.");
                //throw;
            }

            Dispatcher.BeginInvoke(new Action(delegate
            {
                CLIOutput.Focus();
                this.CLIOutput.AppendText("WorkingDirectory " + param_WorkingDirectory.ToString());
                this.CLIOutput.AppendText(Environment.NewLine);
                this.CLIOutput.AppendText("python " + full_param.ToString());
                this.CLIOutput.AppendText(Environment.NewLine);
                this.CLIOutput.AppendText(Environment.NewLine);
                CLIOutput.Select(CLIOutput.Text.Length, 0);
            }), System.Windows.Threading.DispatcherPriority.ApplicationIdle, null);

            try
            {
                pHandle.BeginOutputReadLine();
            }
            catch (Exception)
            {
                this.CLIOutput.Clear();
                this.CLIOutput.Text = "BeginOutputReadLine crashed...\n";
            }

            try
            {
                pHandle.BeginErrorReadLine();
            }
            catch (Exception)
            {
                this.CLIOutput.Clear();
                this.CLIOutput.Text = "BeginErrorReadLine crashed...\n";
            }

            //pHandle.BeginErrorReadLine();
            //MessageBox.Show("Some parameters do not mix well and crashed...");

            //pHandle.WaitForExit();

            /*
             * pHandle.CancelOutputRead();
             * pHandle.Close();
             * this.btnAbort.IsEnabled = false;
             * this.btnRun.IsEnabled = true;
             * this.CLIOutput.Text = console_buffer.ToString();
             */
        }