diff --git a/bin/lang/english.json b/bin/lang/english.json index a2f8e34..2b43909 100644 --- a/bin/lang/english.json +++ b/bin/lang/english.json @@ -26,6 +26,7 @@ "IDC_RADIO_SCALE_RATIO":"Set rate", "IDC_RADIO_SCALE_WIDTH":"Set trans width", "IDC_RADIO_SCALE_HEIGHT":"Set trans height", +"IDC_RADIO_SCALE_WIDTH_HEIGHT":"Set trans width and height", "IDC_STATIC_MODEL":"Model", "IDC_RADIO_MODEL_RGB":"2-D illust (RGB Model)", "IDC_RADIO_MODEL_PHOTO":"Photography, Anime", diff --git a/bin/lang/japanese.json b/bin/lang/japanese.json index 5510065..cc66113 100644 --- a/bin/lang/japanese.json +++ b/bin/lang/japanese.json @@ -26,6 +26,7 @@ "IDC_RADIO_SCALE_RATIO":"拡大率で指定", "IDC_RADIO_SCALE_WIDTH":"変換後の横幅で指定", "IDC_RADIO_SCALE_HEIGHT":"変換後の縦幅で指定", +"IDC_RADIO_SCALE_WIDTH_HEIGHT":"変換後の縦横幅で指定", "IDC_STATIC_MODEL":"モデル", "IDC_RADIO_MODEL_RGB":"2次元イラスト (RGBモデル)", "IDC_RADIO_MODEL_PHOTO":"写真・アニメ (Photoモデル)", diff --git a/common/stImage.cpp b/common/stImage.cpp index b7495cb..840e8ac 100644 --- a/common/stImage.cpp +++ b/common/stImage.cpp @@ -633,6 +633,20 @@ void stImage::Postprocess(const int input_plane, const double scale, const int d AlphaCleanImage(mEndImage); } +void stImage::Postprocess(const int input_plane, const int width, const int height, const int depth) +{ + DeconvertFromNetFormat(input_plane); + ShrinkImage(width, height); + + // l0`1ɃNbsO + cv::threshold(mEndImage, mEndImage, 1.0, 1.0, cv::THRESH_TRUNC); + cv::threshold(mEndImage, mEndImage, 0.0, 0.0, cv::THRESH_TOZERO); + + mEndImage = DeconvertFromFloat(mEndImage, depth); + + AlphaCleanImage(mEndImage); +} + void stImage::DeconvertFromNetFormat(const int input_plane) { if (input_plane == 1) // Yf @@ -748,6 +762,19 @@ void stImage::ShrinkImage(const double scale) } } +void stImage::ShrinkImage(const int width, const int height) +{ + // TODO: scale = 1.0 łeyڂȂׂ + + const cv::Size_ ns(width, height); + if (mEndImage.size().width != ns.width || mEndImage.size().height != ns.height) + { + int argo = cv::INTER_CUBIC; + + cv::resize(mEndImage, mEndImage, ns, 0.0, 0.0, argo); + } +} + cv::Mat stImage::DeconvertFromFloat(const cv::Mat &im, const int depth) { const int cv_depth = DepthBitToCVDepth(depth); diff --git a/common/stImage.h b/common/stImage.h index d123b85..49973d0 100644 --- a/common/stImage.h +++ b/common/stImage.h @@ -69,6 +69,7 @@ private: void DeconvertFromNetFormat(const int input_plane); void ShrinkImage(const double scale); + void ShrinkImage(const int width, const int height); static int DepthBitToCVDepth(const int depth_bit); static double GetValumeMaxFromCVDepth(const int cv_depth); @@ -125,6 +126,7 @@ public: void SetReconstructedA(cv::Mat &im, const cv::Size_ &size, const int inner_scale); void Postprocess(const int input_plane, const double scale, const int depth); + void Postprocess(const int input_plane, const int width, const int height, const int depth); cv::Mat GetEndImage() const; diff --git a/common/waifu2x.cpp b/common/waifu2x.cpp index 84ef227..b531726 100644 --- a/common/waifu2x.cpp +++ b/common/waifu2x.cpp @@ -779,7 +779,10 @@ Waifu2x::eWaifu2xError Waifu2x::waifu2x(const boost::filesystem::path &input_fil if (ret != Waifu2x::eWaifu2xError_OK) return ret; - image.Postprocess(mInputPlane, Factor, output_depth); + if(!scale_width || !scale_height) + image.Postprocess(mInputPlane, Factor, output_depth); + else + image.Postprocess(mInputPlane, *scale_width, *scale_height, output_depth); ret = image.Save(output_file, output_quality); if (ret != Waifu2x::eWaifu2xError_OK) @@ -857,6 +860,14 @@ double Waifu2x::CalcScaleRatio(const boost::optional scale_ratio, const if (scale_ratio) return *scale_ratio; + if (scale_width && scale_height) + { + const auto d1 = image.GetScaleFromWidth(*scale_width); + const auto d2 = image.GetScaleFromWidth(*scale_height); + + return d1 >= d2 ? d1 : d2; + } + if (scale_width) return image.GetScaleFromWidth(*scale_width); diff --git a/waifu2x-caffe-gui/MainDialog.cpp b/waifu2x-caffe-gui/MainDialog.cpp index 945189c..b8fae24 100644 --- a/waifu2x-caffe-gui/MainDialog.cpp +++ b/waifu2x-caffe-gui/MainDialog.cpp @@ -171,8 +171,10 @@ tstring DialogEvent::AddName() const addstr += TEXT("(x") + to_tstring(scale_ratio) + TEXT(")"); else if (scaleType == eScaleTypeWidth) addstr += TEXT("(width ") + to_tstring(scale_width) + TEXT(")"); - else + else if (scaleType == eScaleTypeHeight) addstr += TEXT("(height ") + to_tstring(scale_height) + TEXT(")"); + else + addstr += TEXT("(") + to_tstring(scale_width) + TEXT("x") + to_tstring(scale_height) + TEXT(")"); } if (output_depth != 8) @@ -236,8 +238,10 @@ bool DialogEvent::SyncMember(const bool NotSyncCropSize, const bool silent) scaleType = eScaleTypeRatio; else if (SendMessage(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH), BM_GETCHECK, 0, 0)) scaleType = eScaleTypeWidth; - else + else if (SendMessage(GetDlgItem(dh, IDC_RADIO_SCALE_HEIGHT), BM_GETCHECK, 0, 0)) scaleType = eScaleTypeHeight; + else + scaleType = eScaleTypeWidthHeight; { TCHAR buf[AR_PATH_MAX] = TEXT(""); @@ -295,13 +299,75 @@ bool DialogEvent::SyncMember(const bool NotSyncCropSize, const bool silent) ret = false; if (!silent) - MessageBox(dh, langStringList.GetString(L"MessageScaleHeightCheckError").c_str(), langStringList.GetString(L"MessageTitleError").c_str(), MB_OK | MB_ICONERROR); + MessageBox(dh, langStringList.GetString(L"MessageScaleWidthCheckError").c_str(), langStringList.GetString(L"MessageTitleError").c_str(), MB_OK | MB_ICONERROR); } } else scale_height = l; } + if (scaleType == eScaleTypeWidthHeight) + { + TCHAR buf[AR_PATH_MAX] = TEXT(""); + GetWindowText(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), buf, _countof(buf)); + buf[_countof(buf) - 1] = TEXT('\0'); + + std::vector v; + TCHAR *p = buf; + TCHAR *context= nullptr; + for (;;) + { + const auto str = _tcstok_s(p, TEXT(" x"), &context); + if (!str) + break; + p = nullptr; + + v.push_back(str); + } + + if (v.size() == 2) + { + TCHAR *ptr = nullptr; + long l = 0; + + l = _tcstol(v[0], &ptr, 10); + if (!ptr || *ptr != TEXT('\0') || l <= 0) + { + ret = false; + + if (!silent) + MessageBox(dh, langStringList.GetString(L"MessageScaleWidthCheckError").c_str(), langStringList.GetString(L"MessageTitleError").c_str(), MB_OK | MB_ICONERROR); + } + else + { + scale_width = l; + } + + if (ret) + { + l = _tcstol(v[1], &ptr, 10); + if (!ptr || *ptr != TEXT('\0') || l <= 0) + { + ret = false; + + if (!silent) + MessageBox(dh, langStringList.GetString(L"MessageScaleWidthCheckError").c_str(), langStringList.GetString(L"MessageTitleError").c_str(), MB_OK | MB_ICONERROR); + } + else + { + scale_height = l; + } + } + } + else + { + ret = false; + + if (!silent) + MessageBox(dh, langStringList.GetString(L"MessageScaleWidthCheckError").c_str(), langStringList.GetString(L"MessageTitleError").c_str(), MB_OK | MB_ICONERROR); + } + } + { const int cur = SendMessage(GetDlgItem(dh, IDC_COMBO_MODEL), CB_GETCURSEL, 0, 0); switch (cur) @@ -743,7 +809,11 @@ void DialogEvent::ProcessWaifu2x() case eScaleTypeWidth: ScaleWidth = scale_width; break; + case eScaleTypeHeight: + ScaleWidth = scale_height; + break; default: + ScaleWidth = scale_width; ScaleHeight = scale_height; break; } @@ -972,8 +1042,10 @@ void DialogEvent::SaveIni(const bool isSyncMember) tScaleMode = TEXT("Ratio"); else if (scaleType == eScaleTypeWidth) tScaleMode = TEXT("Width"); - else + else if (scaleType == eScaleTypeHeight) tScaleMode = TEXT("Height"); + else + tScaleMode = TEXT("WidthHeight"); WritePrivateProfileString(TEXT("Setting"), TEXT("LastScaleMode"), tScaleMode.c_str(), getTString(SettingFilePath).c_str()); @@ -1481,6 +1553,7 @@ void DialogEvent::SetWindowTextLang() SET_WINDOW_TEXT(IDC_RADIO_SCALE_RATIO); SET_WINDOW_TEXT(IDC_RADIO_SCALE_WIDTH); SET_WINDOW_TEXT(IDC_RADIO_SCALE_HEIGHT); + SET_WINDOW_TEXT(IDC_RADIO_SCALE_WIDTH_HEIGHT); SET_WINDOW_TEXT(IDC_STATIC_MODEL); SET_WINDOW_TEXT(IDC_CHECK_TTA); SET_WINDOW_TEXT(IDC_STATIC_PROCESS_SPEED_SETTING); @@ -1720,6 +1793,7 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData) tstring tScaleRatio; tstring tScaleWidth; tstring tScaleHeight; + tstring tScaleWidthHeight; tstring tScaleMode; tstring tmode; @@ -1823,30 +1897,48 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData) SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_CHECKED, 0); SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0); + SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), TRUE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE); } else if (tScaleMode == TEXT("Width")) { SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_CHECKED, 0); SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0); + SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), TRUE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE); + } + else if (tScaleMode == TEXT("Height")) + { + SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_UNCHECKED, 0); + SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_UNCHECKED, 0); + SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_CHECKED, 0); + SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0); + + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), TRUE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE); } else { SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_UNCHECKED, 0); - SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_CHECKED, 0); + SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0); + SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_CHECKED, 0); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE); - EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), TRUE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), TRUE); } if (noise_level == 0) @@ -1888,9 +1980,11 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData) EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_RATIO), FALSE); EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH), FALSE); EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_HEIGHT), FALSE); + EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH_HEIGHT), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE); } else if (tmode == TEXT("scale")) { @@ -1943,6 +2037,7 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData) SetWindowText(GetDlgItem(hWnd, IDC_EDIT_SCALE_RATIO), tScaleRatio.c_str()); SetWindowText(GetDlgItem(hWnd, IDC_EDIT_SCALE_WIDTH), tScaleWidth.c_str()); SetWindowText(GetDlgItem(hWnd, IDC_EDIT_SCALE_HEIGHT), tScaleHeight.c_str()); + SetWindowText(GetDlgItem(hWnd, IDC_EDIT_SCALE_WIDTH_HEIGHT), tScaleWidthHeight.c_str()); SetWindowText(GetDlgItem(hWnd, IDC_EDIT_INPUT_EXT_LIST), inputFileExt.c_str()); @@ -2034,6 +2129,9 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData) TCLAP::ValueArg cmdScaleHeight(L"h", L"scale_height", L"custom scale height", false, 0, L"double", cmd); + TCLAP::ValueArg cmdScaleWidthHeight(L"", L"scale_width_height", + L"custom scale width and height", false, 0, L"double", cmd); + std::vector cmdProcessConstraintV; cmdProcessConstraintV.push_back(L"cpu"); cmdProcessConstraintV.push_back(L"gpu"); @@ -2205,10 +2303,12 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData) SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_CHECKED, 0); SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0); + SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), TRUE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE); SetWindowText(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), to_tstring(cmdScaleWidth.getValue()).c_str()); @@ -2219,10 +2319,12 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData) SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_CHECKED, 0); + SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), TRUE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), TRUE); SetWindowText(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), to_tstring(cmdScaleHeight.getValue()).c_str()); @@ -2233,15 +2335,33 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData) SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_CHECKED, 0); SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0); + SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), TRUE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE); SetWindowText(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), to_tstring(cmdScaleRatio.getValue()).c_str()); isSetParam = true; } + else if (cmdScaleWidthHeight.isSet()) + { + SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_UNCHECKED, 0); + SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_UNCHECKED, 0); + SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0); + SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_CHECKED, 0); + + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), TRUE); + + SetWindowText(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), to_tstring(cmdScaleWidthHeight.getValue()).c_str()); + + isSetParam = true; + } if (cmdProcess.isSet()) { @@ -2436,6 +2556,7 @@ void DialogEvent::OnModeChange(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID l EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_RATIO), TRUE); EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH), TRUE); EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_HEIGHT), TRUE); + EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH_HEIGHT), TRUE); ScaleRadio(NULL, NULL, NULL, NULL); // ReplaceAddString()邩return return; @@ -2445,10 +2566,12 @@ void DialogEvent::OnModeChange(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID l EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_RATIO), FALSE); EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH), FALSE); EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_HEIGHT), FALSE); + EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH_HEIGHT), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE); } ReplaceAddString(); @@ -2461,18 +2584,28 @@ void DialogEvent::ScaleRadio(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpD EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), TRUE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE); } else if (SendMessage(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH), BM_GETCHECK, 0, 0)) { EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), TRUE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE); + } + else if (SendMessage(GetDlgItem(dh, IDC_RADIO_SCALE_HEIGHT), BM_GETCHECK, 0, 0)) + { + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), TRUE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE); } else { EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE); EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE); - EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), TRUE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE); + EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), TRUE); } ReplaceAddString(); diff --git a/waifu2x-caffe-gui/MainDialog.h b/waifu2x-caffe-gui/MainDialog.h index a9fca37..0140260 100644 --- a/waifu2x-caffe-gui/MainDialog.h +++ b/waifu2x-caffe-gui/MainDialog.h @@ -79,6 +79,7 @@ private: eScaleTypeRatio, eScaleTypeWidth, eScaleTypeHeight, + eScaleTypeWidthHeight, eScaleTypeEnd, }; diff --git a/waifu2x-caffe-gui/Resource.rc b/waifu2x-caffe-gui/Resource.rc index cfc737f..50021ea 100644 Binary files a/waifu2x-caffe-gui/Resource.rc and b/waifu2x-caffe-gui/Resource.rc differ diff --git a/waifu2x-caffe-gui/Source.cpp b/waifu2x-caffe-gui/Source.cpp index effdc9a..13d3b90 100644 --- a/waifu2x-caffe-gui/Source.cpp +++ b/waifu2x-caffe-gui/Source.cpp @@ -37,6 +37,7 @@ int WINAPI WinMain(HINSTANCE hInstance, CControl cControlScaleRatio(IDC_EDIT_SCALE_RATIO); CControl cControlScaleWidth(IDC_EDIT_SCALE_WIDTH); CControl cControlScaleHeight(IDC_EDIT_SCALE_HEIGHT); + CControl cControlScaleWidthHeight(IDC_EDIT_SCALE_WIDTH_HEIGHT); // o^֐܂Ƃ߂ꂽNX // O[o֐g΃NXɂ܂Ƃ߂Kv͂Ȃ̕@𗧂‚Ƃ͂ @@ -51,6 +52,7 @@ int WINAPI WinMain(HINSTANCE hInstance, cControlScaleRatio.SetEventCallBack(SetClassCustomFunc(DialogEvent::TextInput, &cDialogEvent), NULL, WM_CHAR); cControlScaleWidth.SetEventCallBack(SetClassCustomFunc(DialogEvent::TextInput, &cDialogEvent), NULL, WM_CHAR); cControlScaleHeight.SetEventCallBack(SetClassCustomFunc(DialogEvent::TextInput, &cDialogEvent), NULL, WM_CHAR); + cControlScaleWidthHeight.SetEventCallBack(SetClassCustomFunc(DialogEvent::TextInput, &cDialogEvent), NULL, WM_CHAR); // Rg[̃TuNXo^ cDialog.AddControl(&cControlInput); @@ -58,6 +60,7 @@ int WINAPI WinMain(HINSTANCE hInstance, cDialog.AddControl(&cControlScaleRatio); cDialog.AddControl(&cControlScaleWidth); cDialog.AddControl(&cControlScaleHeight); + cDialog.AddControl(&cControlScaleWidthHeight); // eRg[̃CxgŎs֐̓o^ cDialog.SetCommandCallBack(SetClassFunc(DialogEvent::Exec, &cDialogEvent), NULL, IDC_BUTTON_EXEC); @@ -71,6 +74,7 @@ int WINAPI WinMain(HINSTANCE hInstance, cDialog.SetCommandCallBack(SetClassFunc(DialogEvent::OnModeChange, &cDialogEvent), NULL, IDC_RADIO_MODE_SCALE); cDialog.SetCommandCallBack(SetClassFunc(DialogEvent::OnModeChange, &cDialogEvent), NULL, IDC_RADIO_MODE_NOISE_SCALE); cDialog.SetCommandCallBack(SetClassFunc(DialogEvent::OnModeChange, &cDialogEvent), NULL, IDC_RADIO_AUTO_SCALE); + cDialog.SetCommandCallBack(SetClassFunc(DialogEvent::OnModeChange, &cDialogEvent), NULL, IDC_RADIO_SCALE_WIDTH_HEIGHT); cDialog.SetCommandCallBack(SetClassFunc(DialogEvent::UpdateAddString, &cDialogEvent), NULL, IDC_RADIONOISE_LEVEL0); cDialog.SetCommandCallBack(SetClassFunc(DialogEvent::UpdateAddString, &cDialogEvent), NULL, IDC_RADIONOISE_LEVEL1); diff --git a/waifu2x-caffe-gui/resource.h b/waifu2x-caffe-gui/resource.h index c4764bc..1384697 100644 Binary files a/waifu2x-caffe-gui/resource.h and b/waifu2x-caffe-gui/resource.h differ