From bf5ba2e664d2c7ec3cc9a816e2e1be40b291f560 Mon Sep 17 00:00:00 2001 From: nayk Date: Sat, 19 Jul 2025 23:10:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 107 ++++ CMakeLists.txt | 8 + LICENSE | 9 + LICENSE.ru | 25 + README.md | 13 +- _cmake/app_settings.cmake | 28 + _cmake/common.cmake | 54 ++ _cmake/config.h.in | 9 + _cmake/copy_depends.cmake | 289 +++++++++ _cmake/developer.cmake | 8 + _cmake/lib_settings.cmake | 29 + _cmake/post_build.cmake | 40 ++ _cmake/setup_directories.cmake | 39 ++ _cmake/target_options.cmake | 61 ++ _cmake/update_translations.cmake | 70 +++ _cmake/version.cmake | 52 ++ _cmake/versioninfo.rc.in | 35 ++ _include/application_config.cpp | 106 ++++ _include/application_config.h | 46 ++ _resources/icons.qrc | 12 + _resources/icons/cancel-40.png | Bin 0 -> 1039 bytes _resources/icons/change-theme-40.png | Bin 0 -> 237 bytes _resources/icons/close-40.png | Bin 0 -> 487 bytes _resources/icons/ok-40.png | Bin 0 -> 1100 bytes _resources/icons/opened-folder-40.png | Bin 0 -> 534 bytes _resources/icons/restart-40.png | Bin 0 -> 1554 bytes _resources/icons/save-as-40.png | Bin 0 -> 840 bytes _resources/icons/shutdown-40.png | Bin 0 -> 1315 bytes _resources/images/main_icon.png | Bin 0 -> 410 bytes _resources/images/main_title.png | Bin 0 -> 5469 bytes _resources/images/screenshot.png | Bin 0 -> 162948 bytes _resources/main.ico | Bin 0 -> 52014 bytes _resources/main.qrc | 6 + _resources/main_icon.rc | 1 + sources/CMakeLists.txt | 87 +++ sources/main.cpp | 21 + sources/main_window.cpp | 819 ++++++++++++++++++++++++++ sources/main_window.h | 120 ++++ sources/main_window.ui | 693 ++++++++++++++++++++++ 39 files changed, 2786 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 LICENSE create mode 100644 LICENSE.ru create mode 100644 _cmake/app_settings.cmake create mode 100644 _cmake/common.cmake create mode 100644 _cmake/config.h.in create mode 100644 _cmake/copy_depends.cmake create mode 100644 _cmake/developer.cmake create mode 100644 _cmake/lib_settings.cmake create mode 100644 _cmake/post_build.cmake create mode 100644 _cmake/setup_directories.cmake create mode 100644 _cmake/target_options.cmake create mode 100644 _cmake/update_translations.cmake create mode 100644 _cmake/version.cmake create mode 100644 _cmake/versioninfo.rc.in create mode 100644 _include/application_config.cpp create mode 100644 _include/application_config.h create mode 100644 _resources/icons.qrc create mode 100644 _resources/icons/cancel-40.png create mode 100644 _resources/icons/change-theme-40.png create mode 100644 _resources/icons/close-40.png create mode 100644 _resources/icons/ok-40.png create mode 100644 _resources/icons/opened-folder-40.png create mode 100644 _resources/icons/restart-40.png create mode 100644 _resources/icons/save-as-40.png create mode 100644 _resources/icons/shutdown-40.png create mode 100644 _resources/images/main_icon.png create mode 100644 _resources/images/main_title.png create mode 100644 _resources/images/screenshot.png create mode 100644 _resources/main.ico create mode 100644 _resources/main.qrc create mode 100644 _resources/main_icon.rc create mode 100644 sources/CMakeLists.txt create mode 100644 sources/main.cpp create mode 100644 sources/main_window.cpp create mode 100644 sources/main_window.h create mode 100644 sources/main_window.ui diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..23a669a --- /dev/null +++ b/.gitignore @@ -0,0 +1,107 @@ +.build/ +_other/ +_distrib*/ + +# Tmp files +*~ +Thumbs.db* + +# C++ objects and libs +*.slo +*.lo +*.o +*.a +*.la +*.lai +*.so +*.so.* +*.dll +*.dylib +*.ko +*.obj +*.elf +*.lib + +# Qt-es +object_script.*.Release +object_script.*.Debug +*_plugin_import.cpp +/.qmake.cache +/.qmake.stash +*.pro.user +*.pro.user.* +*.qbs.user +*.qbs.user.* +*.moc +moc_*.cpp +moc_*.h +qrc_*.cpp +ui_*.h +*.qmlc +*.jsc +Makefile* +*build-* +*.qm +*.prl + +# Qt unit tests +target_wrapper.* + +# QtCreator +*.autosave + +# QtCreator Qml +*.qmlproject.user +*.qmlproject.user.* + +# QtCreator CMake +CMakeLists.txt.user* + +# QtCreator 4.8< compilation database +compile_commands.json + +# QtCreator local machine specific files for imported projects +*creator.user* + +*_qmlcache.qrc + +# ---> C +# Prerequisites +*.d + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf + +# Fortran module files +*.mod +*.smod + diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..be4ff39 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 4.0) + +project (OpenCvExample) + +# application: +add_subdirectory(sources) + + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9be8c26 --- /dev/null +++ b/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2025 Evgeny Teterin (nayk) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/LICENSE.ru b/LICENSE.ru new file mode 100644 index 0000000..6aff4e4 --- /dev/null +++ b/LICENSE.ru @@ -0,0 +1,25 @@ +MIT лицензия + +Copyright (c) 2025 Evgeny Teterin (nayk) + +Данная лицензия разрешает лицам, получившим копию +данного программного обеспечения и сопутствующей документации +(в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно +использовать Программное Обеспечение без ограничений, +включая неограниченное право на использование, копирование, изменение, +слияние, публикацию, распространение, сублицензирование и/или продажу +копий Программного Обеспечения, а также лицам, которым предоставляется +данное Программное Обеспечение, при соблюдении следующих условий: + +Указанное выше уведомление об авторском праве и данные условия +должны быть включены во все копии или значимые части данного Программного Обеспечения. + +ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», +БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, +ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ +НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. +НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ +ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ, В ТОМ ЧИСЛЕ, +ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ, +ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ +ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ. diff --git a/README.md b/README.md index 6ee62f4..ebe65d3 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,14 @@ # OpenCV_Example -Пример работы с библиотекой обработки изображений OpenCV \ No newline at end of file +Пример работы с библиотекой обработки изображений OpenCV + + +В проекте используются компилятор и библиотеки из MSYS2 для Mingw64 + +## Внешний вид готового приложения (Qt6, OC Windows 11) + +![picture](/_resources/images/screenshot.png) + + + + diff --git a/_cmake/app_settings.cmake b/_cmake/app_settings.cmake new file mode 100644 index 0000000..3dd65b2 --- /dev/null +++ b/_cmake/app_settings.cmake @@ -0,0 +1,28 @@ + +# Файл для подключения в основной проект через include +# Настройки для приложений + +include(${CMAKE_CURRENT_LIST_DIR}/common.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/developer.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/version.cmake) + +# Имя выходного файла совпадает с названием проекта: +set(RUNTIME_OUTPUT_NAME ${PROJECT_NAME}) + +configure_file( + ${CMAKE_CURRENT_LIST_DIR}/config.h.in + ${CMAKE_CURRENT_BINARY_DIR}/config.h + @ONLY +) + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${DISTRIB_DIR}) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${DISTRIB_DIR}) + +if (CMAKE_SYSTEM_NAME STREQUAL "Windows") + configure_file( + ${CMAKE_CURRENT_LIST_DIR}/versioninfo.rc.in + ${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc + @ONLY + ) +endif() + diff --git a/_cmake/common.cmake b/_cmake/common.cmake new file mode 100644 index 0000000..7f4a474 --- /dev/null +++ b/_cmake/common.cmake @@ -0,0 +1,54 @@ + +# Общие настройки для всех типов проектов + +set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +if (CMAKE_COMPILER_IS_GNUCXX) + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0.0") + set(CMAKE_CXX_STANDARD 20) + else() + set(CMAKE_CXX_STANDARD 23) + endif() +else() + set(CMAKE_CXX_STANDARD 23) +endif() + +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Поиск библиотек Qt: +find_package(QT NAMES Qt6 Qt5 REQUIRED) + +# Настройки каталогов: +include(${CMAKE_CURRENT_LIST_DIR}/setup_directories.cmake) + +# Определение разрядности: +if (${CMAKE_SIZEOF_VOID_P} STREQUAL 4) + set(DIR_PREFIX "32") +elseif (${CMAKE_SIZEOF_VOID_P} STREQUAL 8) + set(DIR_PREFIX "64") +endif () + +# Каталог для готовых приложений и библиотек после компиляции: +set(DISTRIB_DIR + ${ROOT_PROJECT_DIR}_distrib/${CMAKE_SYSTEM_NAME}_Qt${QT_VERSION}_${DIR_PREFIX}-bit +) + +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + set(IS_DEBUG TRUE) + set(IS_RELEASE FALSE) +else() + set(IS_DEBUG FALSE) + set(IS_RELEASE TRUE) +endif() + +message(STATUS "Project '${PROJECT_NAME}' compiler ${CMAKE_CXX_COMPILER} version: ${CMAKE_CXX_COMPILER_VERSION}") +message(STATUS "Project '${PROJECT_NAME}' compiler dir: '${CXX_COMPILER_DIR}'") +message(STATUS "Project '${PROJECT_NAME}' cmake dir: '${CMAKE_BIN_DIR}'") +message(STATUS "Project '${PROJECT_NAME}' distrib dir: '${DISTRIB_DIR}'") +message(STATUS "Project '${PROJECT_NAME}' IS_RELEASE: ${IS_RELEASE}, IS_DEBUG: ${IS_DEBUG}") +message(STATUS "Project '${PROJECT_NAME}' CMAKE_PREFIX_PATH: '${CMAKE_PREFIX_PATH}'") +message(STATUS "Project '${PROJECT_NAME}' CMAKE_SYSTEM_LIBRARY_PATH: '${CMAKE_SYSTEM_LIBRARY_PATH}'") + diff --git a/_cmake/config.h.in b/_cmake/config.h.in new file mode 100644 index 0000000..41f8ac6 --- /dev/null +++ b/_cmake/config.h.in @@ -0,0 +1,9 @@ +#define PROG_NAME "@PROJECT_NAME@" +#define PROG_VERSION "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.@BUILD_NUM@@PROJECT_VERSION_TWEAK@" +#define PROG_CAPTION "@PROJECT_NAME@ v" +#define PROG_DESCRIPTION "@PROJECT_DESCRIPTION@" +#define SOFT_DEVELOPER "@SOFT_DEVELOPER@" +#define DEVELOPER_DOMAIN "@DEVELOPER_DOMAIN@" +#define BUILD_DATE "@BUILD_DATE@" +#define BUILD_NUM "@BUILD_NUM@" +#define ORIGINAL_FILE_NAME "@ORIGINAL_FILE_NAME@" diff --git a/_cmake/copy_depends.cmake b/_cmake/copy_depends.cmake new file mode 100644 index 0000000..211a6a7 --- /dev/null +++ b/_cmake/copy_depends.cmake @@ -0,0 +1,289 @@ + +# Определение зависимостей после сборки приложения + +cmake_minimum_required(VERSION 4.0) + +set(LIBS_FIND_DIRS "${PREFIX}") +set(QT_SHARE_DIR "${PREFIX}") + +if (CMAKE_SYSTEM_NAME STREQUAL "Windows") + + if (EXISTS "${PREFIX}/bin") + set(LIBS_FIND_DIRS "${PREFIX}/bin") + endif() + +else() + + if (EXISTS "${PREFIX}/lib") + set(LIBS_FIND_DIRS "${PREFIX}/lib") + endif() + +endif() + +if (EXISTS "${PREFIX}/share/qt${QT_VERSION_MAJOR}") + set(QT_SHARE_DIR "${PREFIX}/share/qt${QT_VERSION_MAJOR}") +endif() + +if(TARGET_TYPE STREQUAL "EXECUTABLE") + + if (EXISTS "${OUTPUT_DIR}/${TARGET_NAME}") + set(TARGET_FILE "${OUTPUT_DIR}/${TARGET_NAME}") + elseif (EXISTS "${OUTPUT_DIR}/${TARGET_NAME}.exe") + set(TARGET_FILE "${OUTPUT_DIR}/${TARGET_NAME}.exe") + endif() + +else() + + if (EXISTS "${OUTPUT_DIR}/${TARGET_NAME}") + set(TARGET_FILE "${OUTPUT_DIR}/${TARGET_NAME}") + elseif (EXISTS "${OUTPUT_DIR}/${TARGET_NAME}.dll") + set(TARGET_FILE "${OUTPUT_DIR}/${TARGET_NAME}.dll") + elseif (EXISTS "${OUTPUT_DIR}/${TARGET_NAME}.so") + set(TARGET_FILE "${OUTPUT_DIR}/${TARGET_NAME}.so") + endif() + +endif() + +message(STATUS "TARGET_FILE: '${TARGET_FILE}'") +message(STATUS "LIBS_FIND_DIRS: '${LIBS_FIND_DIRS}'") +message(STATUS "OUTPUT_DIR: '${OUTPUT_DIR}'") +message(STATUS "QT_VERSION_MAJOR: '${QT_VERSION_MAJOR}'") +message(STATUS "Find and copy dependencies. Please, wait...") + +# functions -------------------------------------------------------------------- + +# Копирование файла + +function(safe_copy src dest) + + # Пытаемся скопировать через execute_process (кросс-платформенно) + execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${src}" "${dest}" + RESULT_VARIABLE copy_result + ERROR_VARIABLE copy_error + OUTPUT_QUIET # Подавляем stdout + ) + + if(NOT copy_result EQUAL 0) + message(WARNING "Не удалось скопировать ${src} -> ${dest}: ${copy_error}") + return() + endif() + +endfunction() + +# Отслеживание цепочки ссылок + +function(get_symlink_chain dep symlink_chain) + unset(chain) + set(current_dep "${dep}") + + # 1. Разрешаем основную цепочку симлинков (исходный файл → конечный файл) + while(IS_SYMLINK "${current_dep}") + execute_process( + COMMAND readlink "${current_dep}" + OUTPUT_VARIABLE link_target + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + list(INSERT chain 0 "${current_dep}") # Добавляем текущий симлинк в начало + get_filename_component(parent_dir "${current_dep}" DIRECTORY) + set(current_dep "${parent_dir}/${link_target}") # Переходим по ссылке + endwhile() + + # 2. Добавляем конечный файл в начало цепочки + list(INSERT chain 0 "${current_dep}") + + # 3. Теперь ищем ВСЕ симлинки в этой директории, которые ссылаются на конечный файл + if(EXISTS "${current_dep}") + get_filename_component(final_file "${current_dep}" REALPATH) # Абсолютный путь конечного файла + get_filename_component(parent_dir "${current_dep}" DIRECTORY) # Директория конечного файла + + # Получаем список всех файлов в этой директории + file(GLOB all_files LIST_DIRECTORIES false "${parent_dir}/*") + foreach(file IN LISTS all_files) + # Если это симлинк, проверяем, ведёт ли он на конечный файл + if(IS_SYMLINK "${file}") + execute_process( + COMMAND readlink -f "${file}" # Абсолютный путь цели симлинка + OUTPUT_VARIABLE symlink_target + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + # Если цель симлинка совпадает с конечным файлом, добавляем в цепочку + if(symlink_target STREQUAL final_file AND NOT file IN_LIST chain) + list(APPEND chain "${file}") + endif() + endif() + endforeach() + endif() + + set(${symlink_chain} "${chain}" PARENT_SCOPE) +endfunction() + +# ------------------------------------------------------------------------------ + +if (EXISTS "${TARGET_FILE}") + + # Получаем runtime-зависимости + file(GET_RUNTIME_DEPENDENCIES + EXECUTABLES ${TARGET_FILE} + RESOLVED_DEPENDENCIES_VAR RESOLVED_DEPS + UNRESOLVED_DEPENDENCIES_VAR UNRESOLVED_DEPS + DIRECTORIES ${LIBS_FIND_DIRS} + ) + + set(USE_SQL OFF) + set(USE_PRINT OFF) + set(USE_NETWORK OFF) + set(USE_SERIALPORT OFF) + set(USE_MULTIMEDIA OFF) + + message(STATUS "\nResolved dependencies copy:\n") + + foreach(DEP ${RESOLVED_DEPS}) + + string(FIND "${DEP}" "${LIBS_FIND_DIRS}" POS) + + if(POS EQUAL 0) + + if (CMAKE_SYSTEM_NAME STREQUAL "Windows") + + message(STATUS "${DEP}") + file(COPY "${DEP}" DESTINATION "${OUTPUT_DIR}") + + else () + + #message(STATUS "${DEP}") + #file(COPY "${DEP}" DESTINATION "${OUTPUT_DIR}/system_lib" FOLLOW_SYMLINK_CHAIN) + + get_symlink_chain("${DEP}" dep_chain) + + foreach(file IN LISTS dep_chain) + + message(STATUS "${file}") + safe_copy("${file}" "${OUTPUT_DIR}") + + endforeach() + + endif() + + endif() + + string(FIND "${DEP}" "Qt${QT_VERSION_MAJOR}Sql" POS) + + if(POS GREATER 0) + set(USE_SQL ON) + endif() + + string(FIND "${DEP}" "Qt${QT_VERSION_MAJOR}Print" POS) + + if(POS GREATER 0) + set(USE_PRINT ON) + endif() + + string(FIND "${DEP}" "Qt${QT_VERSION_MAJOR}Network" POS) + + if(POS GREATER 0) + set(USE_NETWORK ON) + endif() + + string(FIND "${DEP}" "Qt${QT_VERSION_MAJOR}Serial" POS) + + if(POS GREATER 0) + set(USE_SERIALPORT ON) + endif() + + string(FIND "${DEP}" "Qt${QT_VERSION_MAJOR}Multimedia" POS) + + if(POS GREATER 0) + set(USE_MULTIMEDIA ON) + endif() + + endforeach() + + if (EXISTS "${LIBS_FIND_DIRS}/libQt${QT_VERSION_MAJOR}XcbQpa.so") + + get_symlink_chain("${LIBS_FIND_DIRS}/libQt${QT_VERSION_MAJOR}XcbQpa.so" xcb_chain) + + foreach(file IN LISTS xcb_chain) + + message(STATUS "${file}") + safe_copy("${file}" "${OUTPUT_DIR}") + + endforeach() + + endif() + + message(STATUS "\nResolved dependencies not copy:\n") + + foreach(DEP ${RESOLVED_DEPS}) + string(FIND "${DEP}" "${LIBS_FIND_DIRS}" POS) + if(NOT POS EQUAL 0) + message(STATUS "${DEP}") + endif() + endforeach() + + message(STATUS "\nUnresolved dependencies:\n") + + foreach(DEP ${UNRESOLVED_DEPS}) + message(STATUS "${DEP}") + endforeach() + + if (EXISTS "${QT_SHARE_DIR}/plugins/platforms") + file(COPY "${QT_SHARE_DIR}/plugins/platforms" DESTINATION "${OUTPUT_DIR}") + endif() + + if (EXISTS "${QT_SHARE_DIR}/plugins/platformthemes") + file(COPY "${QT_SHARE_DIR}/plugins/platformthemes" DESTINATION "${OUTPUT_DIR}") + endif() + + if (EXISTS "${QT_SHARE_DIR}/plugins/styles") + file(COPY "${QT_SHARE_DIR}/plugins/styles" DESTINATION "${OUTPUT_DIR}") + endif() + + if (EXISTS "${QT_SHARE_DIR}/plugins/imageformats") + file(COPY "${QT_SHARE_DIR}/plugins/imageformats" DESTINATION "${OUTPUT_DIR}") + endif() + + if (USE_SQL AND (EXISTS "${QT_SHARE_DIR}/plugins/sqldrivers")) + file(COPY "${QT_SHARE_DIR}/plugins/sqldrivers" DESTINATION "${OUTPUT_DIR}") + endif() + + if (USE_PRINT AND (EXISTS "${QT_SHARE_DIR}/plugins/printsupport")) + file(COPY "${QT_SHARE_DIR}/plugins/printsupport" DESTINATION "${OUTPUT_DIR}") + endif() + + if (USE_NETWORK AND (EXISTS "${QT_SHARE_DIR}/plugins/networkinformation")) + file(COPY "${QT_SHARE_DIR}/plugins/networkinformation" DESTINATION "${OUTPUT_DIR}") + endif() + + if (USE_MULTIMEDIA AND (EXISTS "${QT_SHARE_DIR}/plugins/multimedia")) + file(COPY "${QT_SHARE_DIR}/plugins/multimedia" DESTINATION "${OUTPUT_DIR}") + endif() + + if (EXISTS "${QT_SHARE_DIR}/translations") + + file(MAKE_DIRECTORY "${OUTPUT_DIR}/translations") + + if (EXISTS "${QT_SHARE_DIR}/translations/qtbase_ru.qm") + file(COPY "${QT_SHARE_DIR}/translations/qtbase_ru.qm" DESTINATION "${OUTPUT_DIR}/translations") + endif() + + if (EXISTS "${QT_SHARE_DIR}/translations/qtdeclarative_ru.qm") + file(COPY "${QT_SHARE_DIR}/translations/qtdeclarative_ru.qm" DESTINATION "${OUTPUT_DIR}/translations") + endif() + + if (USE_SERIALPORT AND (EXISTS "${QT_SHARE_DIR}/translations/qtserialport_ru.qm")) + file(COPY "${QT_SHARE_DIR}/translations/qtserialport_ru.qm" DESTINATION "${OUTPUT_DIR}/translations") + endif() + + if (USE_MULTIMEDIA AND (EXISTS "${QT_SHARE_DIR}/translations/qtmultimedia_ru.qm")) + file(COPY "${QT_SHARE_DIR}/translations/qtmultimedia_ru.qm" DESTINATION "${OUTPUT_DIR}/translations") + endif() + + endif() + +else() + + message(STATUS "'${TARGET_FILE}' not found. Exit.") + +endif() + diff --git a/_cmake/developer.cmake b/_cmake/developer.cmake new file mode 100644 index 0000000..530fa4a --- /dev/null +++ b/_cmake/developer.cmake @@ -0,0 +1,8 @@ + +if(NOT DEFINED SOFT_DEVELOPER OR "${SOFT_DEVELOPER}" STREQUAL "") + set(SOFT_DEVELOPER "Evgeny Teterin") +endif() + +if(NOT DEFINED DEVELOPER_DOMAIN OR "${DEVELOPER_DOMAIN}" STREQUAL "") + set(DEVELOPER_DOMAIN "poseon.ru") +endif() diff --git a/_cmake/lib_settings.cmake b/_cmake/lib_settings.cmake new file mode 100644 index 0000000..324e71d --- /dev/null +++ b/_cmake/lib_settings.cmake @@ -0,0 +1,29 @@ + +# Файл для подключения в основной проект через include +# Настройки для библиотек + +include(${CMAKE_CURRENT_LIST_DIR}/common.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/developer.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/version.cmake) + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${DISTRIB_DIR}) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${DISTRIB_DIR}) + +if (CMAKE_SYSTEM_NAME STREQUAL "Windows") + set(RUNTIME_OUTPUT_NAME lib${PROJECT_NAME}.dll) + configure_file( + ${CMAKE_CURRENT_LIST_DIR}/versioninfo.rc.in + ${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc + @ONLY + ) +else() + set(RUNTIME_OUTPUT_NAME lib${PROJECT_NAME}.so) +endif() + +configure_file( + ${CMAKE_CURRENT_LIST_DIR}/config.h.in + ${CMAKE_CURRENT_BINARY_DIR}/config.h + @ONLY +) + + diff --git a/_cmake/post_build.cmake b/_cmake/post_build.cmake new file mode 100644 index 0000000..39c5ee3 --- /dev/null +++ b/_cmake/post_build.cmake @@ -0,0 +1,40 @@ + +# Файл для подключения в основной проект через include + +# Вспомогательные действия после сборки проекта + +if(IS_DEBUG) + message(STATUS "Project '${PROJECT_NAME}' [post-build] DEBUG building: skip post-build actions") + return() +endif() + +# Включение/выключение поиска зависимостей: +set(COPY_DEPENDS ON) + +get_target_property(TARGET_TYPE ${PROJECT_NAME} TYPE) + +if(TARGET_TYPE STREQUAL "EXECUTABLE") + message(STATUS "${PROJECT_NAME} is an executable.") +elseif(TARGET_TYPE STREQUAL "STATIC_LIBRARY" OR TARGET_TYPE STREQUAL "SHARED_LIBRARY") + message(STATUS "${PROJECT_NAME} is a library.") +else() + message(STATUS "${PROJECT_NAME} is of another type: ${TARGET_TYPE}") +endif() + +if (COPY_DEPENDS) + + add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E echo "Copying runtime dependencies..." + COMMAND ${CMAKE_COMMAND} + -DTARGET_NAME="${RUNTIME_OUTPUT_NAME}" + -DTARGET_TYPE="${TARGET_TYPE}" + -DOUTPUT_DIR="${DISTRIB_DIR}" + -DPREFIX="${CMAKE_PREFIX_PATH}" + -DQT_VERSION_MAJOR=${QT_VERSION_MAJOR} + -DCMAKE_SYSTEM_NAME="${CMAKE_SYSTEM_NAME}" + -P "${CMAKE_INC_DIR}/copy_depends.cmake" + COMMENT "Copying runtime dependencies for ${PROJECT_NAME}" + ) + +endif() + diff --git a/_cmake/setup_directories.cmake b/_cmake/setup_directories.cmake new file mode 100644 index 0000000..65235b8 --- /dev/null +++ b/_cmake/setup_directories.cmake @@ -0,0 +1,39 @@ + +set(ROOT_PROJECT_DIR + ${CMAKE_CURRENT_LIST_DIR}/.. +) + +cmake_path(NORMAL_PATH ROOT_PROJECT_DIR OUTPUT_VARIABLE ROOT_PROJECT_DIR) + +set(CMAKE_INC_DIR + ${ROOT_PROJECT_DIR}_cmake +) + +set(RESOURCES_DIR + ${ROOT_PROJECT_DIR}_resources +) + +set(COMMON_SOURCES_DIR + ${ROOT_PROJECT_DIR}_include +) + +if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + set(SYSTEM_INCLUDE_DIR "${CMAKE_PREFIX_PATH}/include") +else () + set(SYSTEM_INCLUDE_DIR "/usr/include") +endif () + +get_filename_component(CXX_COMPILER_DIR "${CMAKE_CXX_COMPILER}" DIRECTORY) + +get_filename_component(CMAKE_BIN_DIR "${CMAKE_COMMAND}" DIRECTORY) + +set(ROOT_COMPILER_DIR + ${CXX_COMPILER_DIR}/.. +) + +cmake_path(NORMAL_PATH ROOT_COMPILER_DIR OUTPUT_VARIABLE ROOT_COMPILER_DIR) + +set(COMPILER_INCLUDE_DIR + ${ROOT_COMPILER_DIR}include +) + diff --git a/_cmake/target_options.cmake b/_cmake/target_options.cmake new file mode 100644 index 0000000..a6e7fbe --- /dev/null +++ b/_cmake/target_options.cmake @@ -0,0 +1,61 @@ + +# Файл для подключения в основной проект через include + +# Настройки компиляции для всего +target_compile_options(${PROJECT_NAME} PRIVATE + -Wall + -Wextra + -Wpedantic +) + + +if (DISABLE_HARD_WARNING_ERROR) + target_compile_options(${PROJECT_NAME} PRIVATE + -Wall + -Wextra + -Wpedantic + ) +else() + target_compile_options(${PROJECT_NAME} PRIVATE + -Wall # Все стандартные предупреждения + -Wextra # Дополнительные предупреждения + -Wpedantic # Соответствие стандарту C++ + -Werror # Превратить предупреждения в ошибки + -Wconversion # Предупреждения о неявных преобразованиях + -Wsign-conversion # Предупреждения о знаковых/беззнаковых преобразованиях + -Wshadow # Предупреждения о "тенях" переменных + -Wunused # Предупреждения о неиспользуемом коде + -Wold-style-cast # Запрет C-style кастов (только static_cast/dynamic_cast/...) + -Wnull-dereference # Предупреждения о возможных разыменованиях nullptr + -Wdouble-promotion # Предупреждения о неявном преобразовании float → double + -Wformat=2 # Строгая проверка printf/scanf + ) +endif() + +target_compile_definitions(${PROJECT_NAME} PRIVATE + QT_NO_FOREACH + QT_NO_URL_CAST_FROM_STRING + QT_NO_NARROWING_CONVERSIONS_IN_CONNECT + QT_STRICT_ITERATORS +) + +find_program(CLANG_TIDY_EXE NAMES "clang-tidy") + +if (CLANG_TIDY_EXE) + set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE};-checks=*") +endif() + +if (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") + target_compile_options(${PROJECT_NAME} PRIVATE + -fsanitize=address # AddressSanitizer (поиск утечек, выходов за границы) + -fsanitize=undefined # UndefinedBehaviorSanitizer (UB-проверки) + -fsanitize=leak # LeakSanitizer (поиск утечек памяти) + -fno-omit-frame-pointer # Для лучшего стека вызовов в санитайзерах + ) + target_link_options(${PROJECT_NAME} PRIVATE + -fsanitize=address + -fsanitize=undefined + -fsanitize=leak + ) +endif() + diff --git a/_cmake/update_translations.cmake b/_cmake/update_translations.cmake new file mode 100644 index 0000000..f21186f --- /dev/null +++ b/_cmake/update_translations.cmake @@ -0,0 +1,70 @@ + +# Файл для подключения в основной проект через include + +# Обновление и генерация файлов переводов +# Языки переводов перечислить в переменной LNG + +if(IS_DEBUG) + message(STATUS "Project '${PROJECT_NAME}' [translations] DEBUG building: skip .qm generation") + return() +endif() + +# Если список языков не задан в основном CMakeLists.txt — применяем по умолчанию +if(NOT DEFINED LNG) + set(LNG en ru) + message(STATUS "Project '${PROJECT_NAME}' [translations] LNG not set, use default: ${LNG}") +else() + message(STATUS "Project '${PROJECT_NAME}' [translations] Use LNG: ${LNG}") +endif() + +# Подключить LinguistTools +find_package(Qt${QT_VERSION_MAJOR}LinguistTools REQUIRED) + +# Полные пути утилит +get_target_property(LUPDATE_EXECUTABLE Qt${QT_VERSION_MAJOR}::lupdate IMPORTED_LOCATION) +get_target_property(LRELEASE_EXECUTABLE Qt${QT_VERSION_MAJOR}::lrelease IMPORTED_LOCATION) + +# Каталог генерации файлов ts и qm файлов +set(TRANSLATIONS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/translations") +set(QM_OUTPUT_DIR "${DISTRIB_DIR}/translations") +file(MAKE_DIRECTORY "${TRANSLATIONS_DIR}") +file(MAKE_DIRECTORY "${QM_OUTPUT_DIR}") + +# Список TS файлов в зависимости от списка языков +set(TS_FILES "") + +# Обновление каждого файла с добавлением в список +foreach(LANG ${LNG}) + + set(TS_FILE "${TRANSLATIONS_DIR}/${PROJECT_NAME}_${LANG}.ts") + list(APPEND TS_FILES "${TS_FILE}") + message(STATUS "Project '${PROJECT_NAME}' Update translation file: ${TS_FILE}") + + execute_process(COMMAND ${LUPDATE_EXECUTABLE} + ${PROJECT_SOURCES} + -ts ${TS_FILE} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ) + +endforeach() + +# Генерация файлов qm +set(QM_FILES "") + +foreach(TS ${TS_FILES}) + + get_filename_component(TS_NAME_WE ${TS} NAME_WE) + set(QM ${QM_OUTPUT_DIR}/${TS_NAME_WE}.qm) + list(APPEND QM_FILES ${QM}) + + add_custom_command( + OUTPUT ${QM} + COMMAND ${LRELEASE_EXECUTABLE} ${TS} -qm ${QM} + DEPENDS ${TS} + COMMENT "Generating ${QM}" + ) +endforeach() + +add_custom_target(translations_qm ALL DEPENDS ${QM_FILES}) + +add_dependencies(translations_qm ${PROJECT_NAME}) diff --git a/_cmake/version.cmake b/_cmake/version.cmake new file mode 100644 index 0000000..c320df2 --- /dev/null +++ b/_cmake/version.cmake @@ -0,0 +1,52 @@ + +# Variables for generating the version. +# Used in the application (config.h file and versioninfo.rc) +# + +# Получаем полный временной штамп в UTC (пример: "2025-04-16 12:33:58 UTC") +string(TIMESTAMP BUILD_DATE "%Y-%m-%d %H:%M:%S UTC" UTC) +string(TIMESTAMP VERSION_DOY "%j" UTC) # день в году (001..366) + +# Извлекаем компоненты даты и времени +string(SUBSTRING "${BUILD_DATE}" 0 4 YEAR_STR) +string(SUBSTRING "${BUILD_DATE}" 2 2 VERSION_YY) +string(SUBSTRING "${BUILD_DATE}" 5 2 VERSION_MM) +string(SUBSTRING "${BUILD_DATE}" 8 2 VERSION_DD) +string(SUBSTRING "${BUILD_DATE}" 11 2 VERSION_HH) +string(SUBSTRING "${BUILD_DATE}" 14 2 VERSION_MIN) +string(SUBSTRING "${BUILD_DATE}" 17 2 VERSION_SS) + +# Убираем ведущие нули путём преобразования в числа +math(EXPR VERSION_YY_NOZERO "${VERSION_YY}") +math(EXPR VERSION_MM_NOZERO "${VERSION_MM}") +math(EXPR VERSION_DD_NOZERO "${VERSION_DD}") +math(EXPR VERSION_HH_NOZERO "${VERSION_HH}") +math(EXPR VERSION_MIN_NOZERO "${VERSION_MIN}") +math(EXPR VERSION_SS_NOZERO "${VERSION_SS}") +math(EXPR VERSION_DOY_NOZERO "${VERSION_DOY}") + +if (VERSION_FULLDATE) + # Полная дата: YY.MM.DD.NNN + + # Считаем количество минут с начала суток + math(EXPR VERSION_NNN + "${VERSION_HH_NOZERO} * 60 + ${VERSION_MIN_NOZERO}" + ) + + set(PROJECT_VERSION_MAJOR ${VERSION_YY_NOZERO}) + set(PROJECT_VERSION_MINOR ${VERSION_MM_NOZERO}) + set(PROJECT_VERSION_PATCH ${VERSION_DD_NOZERO}) + set(BUILD_NUM ${VERSION_NNN}) + +else() + # Версия от MAJOR, MINOR + YY + день года + # MAJOR и MINOR должны быть заданы ранее через `project(... VERSION ...)` + + set(PROJECT_VERSION_PATCH ${VERSION_YY_NOZERO}) + set(BUILD_NUM ${VERSION_DOY_NOZERO}) +endif() + +set(ORIGINAL_FILE_NAME ${RUNTIME_OUTPUT_NAME}) + +message(STATUS "Project '${PROJECT_NAME}' version: ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.${BUILD_NUM}") + diff --git a/_cmake/versioninfo.rc.in b/_cmake/versioninfo.rc.in new file mode 100644 index 0000000..14c4204 --- /dev/null +++ b/_cmake/versioninfo.rc.in @@ -0,0 +1,35 @@ +1 TYPELIB "versioninfo.rc" + +1 VERSIONINFO + FILEVERSION @PROJECT_VERSION_MAJOR@, @PROJECT_VERSION_MINOR@, @PROJECT_VERSION_PATCH@, @BUILD_NUM@ + PRODUCTVERSION @PROJECT_VERSION_MAJOR@, @PROJECT_VERSION_MINOR@, @PROJECT_VERSION_PATCH@, @BUILD_NUM@ + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "@SOFT_DEVELOPER@" + VALUE "FileDescription", "@PROJECT_DESCRIPTION@" + VALUE "FileVersion","@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.@BUILD_NUM@" + VALUE "InternalName", "@PROJECT_NAME@" + VALUE "LegalCopyright", "Copyright (c) @YEAR_STR@ @SOFT_DEVELOPER@" + VALUE "OriginalFilename", "@ORIGINAL_FILE_NAME@" + VALUE "ProductName", "@PROJECT_NAME@" + VALUE "ProductVersion","@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.@BUILD_NUM@" + VALUE "BuildDate", "@BUILD_DATE@" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END diff --git a/_include/application_config.cpp b/_include/application_config.cpp new file mode 100644 index 0000000..573141b --- /dev/null +++ b/_include/application_config.cpp @@ -0,0 +1,106 @@ +/**************************************************************************** +** Copyright (c) 2025 Evgeny Teterin (nayk) +** All right reserved. +** +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +** NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +** LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +** OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +** WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +** +****************************************************************************/ +#include "application_config.h" +#include "config.h" +#include +#include +#include +#include +#include + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +# include +#endif + +//============================================================================== +void Application::initialize() +{ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); +#endif + +#if defined (PROG_NAME) + QApplication::setApplicationName( QString(PROG_NAME) ); +#endif + +#if defined (SOFT_DEVELOPER) + QApplication::setOrganizationName( QString(SOFT_DEVELOPER) ); +#endif + +#if defined (DEVELOPER_DOMAIN) + QApplication::setOrganizationDomain( QString(DEVELOPER_DOMAIN) ); +#endif + +#if defined (PROG_VERSION) + QApplication::setApplicationVersion( QString(PROG_VERSION) ); +#endif + +#if defined (BUILD_DATE) + qApp->setProperty( "buildDate", QString(BUILD_DATE) ); +#endif +} +//============================================================================== +QString Application::applicationRootPath() +{ + QString path { QApplication::applicationDirPath() }; + + if ( path.right(1) != "/" ) { + + path += "/"; + } + + if (path.right(5) == "/bin/") { + + path.remove( path.length() - 4, 4 ); + } + + return path; +} +//============================================================================== +void Application::installTranslations(const QString &lng) +{ + const QString dirName { applicationRootPath() + "translations/" }; + QDir translationsDir { dirName }; + + QStringList filesList = translationsDir.entryList( + QStringList() << QString("*_%1.qm").arg(lng), + QDir::Files + ); + + for (const QString &fileName: std::as_const(filesList)) { + + QTranslator *translator = new QTranslator(QApplication::instance()); + + if (translator->load( dirName + fileName )) { + + QApplication::instance()->installTranslator( translator ); + } + else { + + delete translator; + } + } +} +//============================================================================== diff --git a/_include/application_config.h b/_include/application_config.h new file mode 100644 index 0000000..523d184 --- /dev/null +++ b/_include/application_config.h @@ -0,0 +1,46 @@ +/**************************************************************************** +** Copyright (c) 2025 Evgeny Teterin (nayk) +** All right reserved. +** +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +** NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +** LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +** OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +** WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +** +****************************************************************************/ +#pragma once +#ifndef APP_CONFIG_H +#define APP_CONFIG_H + +#include + +//============================================================================== +class Application +{ + Q_DISABLE_COPY(Application) + +public: + static void initialize(); + static QString applicationRootPath(); + static void installTranslations(const QString &lng = "ru"); + +private: + Application() = delete; +}; + +#endif // APP_CONFIG_H +//============================================================================== diff --git a/_resources/icons.qrc b/_resources/icons.qrc new file mode 100644 index 0000000..1f177ec --- /dev/null +++ b/_resources/icons.qrc @@ -0,0 +1,12 @@ + + + icons/cancel-40.png + icons/change-theme-40.png + icons/close-40.png + icons/ok-40.png + icons/opened-folder-40.png + icons/restart-40.png + icons/save-as-40.png + icons/shutdown-40.png + + diff --git a/_resources/icons/cancel-40.png b/_resources/icons/cancel-40.png new file mode 100644 index 0000000000000000000000000000000000000000..13885e5f81bc702118b4ea4bd2e957407e96d91d GIT binary patch literal 1039 zcmV+q1n~QbP)_U^^N?#w7{(?rEYZL0nQ zLKS;bQS{=$RsW6NO^;r*%)&*CQfSf^HSto5iMz0eu9@bG2r3G*{F3w~FCj4Oelqjs zz3+Q2*Z*qV?S2(e)yY_Q_ZOY9G$$k*Q4|}F&w6+FFZ>oEWCCkj0=3!M`H&OxNvHHM z=Jgt>u`%l?7!;ZLd0{RsiQMvX-tigV9ZgM%)aYmqYdK>FTvdY`U0odw2ixfCy3Z*M z>Vz1H;oMf}PwIl>it%{#iqeomyR5eTZ-~VI_7Y!&D=Tb`cBTy3LLktD32?`;b!4N zG$ZD$YBA~e+d8GminklrKkoCLwi?bVc)Y*g)CrlmH3=inNu`q2)pK8we7WTMlWqWtGYHZIB25clmViA9na26!Cjaw0SUO` zdI?BW9G$WKtGnlRze2r4Ns`%(%Vt-Abh5VSnkJ%Nuen9YixQx!22uEBV@l@5b}euP zhrr;f8Ylun7D1Ibxp9>M>^k7!V2LueUIdIXmWDiX0(cvUT_+qo6AFnKV?RnqOsNSC z=M>Po0kU2=xUsY(IHg7@K`V-#lei#GAnh9A;MwJ6l)k^s1>D z783TvPJjR1NPbNd@xDHjQ(96nw=_*DG}WyJJQyFhIb+{G`+WCYl?>wuw18-;TLpKF zwv$rC-XoWcVI093%Qj*bW63m1j6tBjb~!POBhc}qscz=Z>5OF~guHjvVi-r@xDWjP z#>S+koyQ!drsJKvZWu?Py!Wh literal 0 HcmV?d00001 diff --git a/_resources/icons/change-theme-40.png b/_resources/icons/change-theme-40.png new file mode 100644 index 0000000000000000000000000000000000000000..84a31757df853022bd1cb3896dc0d35df24a8b5c GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEoCO|{#S9GG!XV7ZFl&wkP;kDd zi(^Q|oVU{rxf%?3T#GNwSyaJUzWkoEz%CK~M>95>U)bBR(Q)yk{~xwH$=lms5ONgn zOx|8Ki$P-I19oc*-IGUo4m@S$+;nN-UhkhzDjAG~OiB!RHm^R(bff?1QN{*kA)no{ zXEyD!h_L2x$n@AyHg~}`j-67`rz;u0m8(`fIqtrOv!RKF+p0oCr}Iy)=cez)-ogw| hn^@%kmN}(dW@AjuWIg4-^EA+@44$rjF6*2UngGf!Rxbbm literal 0 HcmV?d00001 diff --git a/_resources/icons/close-40.png b/_resources/icons/close-40.png new file mode 100644 index 0000000000000000000000000000000000000000..b0098afe1ecb86aa3741e0dee7fd0b0bb899d6b6 GIT binary patch literal 487 zcmV)b_n11;=E$rTI+ z&&OIH7*&a^S;<}NV>D8@*T()#6-iMt$r4fv_pSZLxs~=?thQCB{Z>IP$bN8~FQm$$ djl0BOiBBr)E4hw2@w@;4002ovPDHLkV1gh9*fjtE literal 0 HcmV?d00001 diff --git a/_resources/icons/ok-40.png b/_resources/icons/ok-40.png new file mode 100644 index 0000000000000000000000000000000000000000..81a445c61a8871ab91ff52d2add4b00891783895 GIT binary patch literal 1100 zcmV-S1he~zP)WW&!4IIu6DLbM?X+A)T4tjO zVq7j>>T&>PgA^Cq%3`E2LQ=&QK5$!sAgvLz_~M^s@E_b8F+z_U$(3X7cwg8d8=R`{j1 z!Gv*nBKfoLWs2N?GfEzPo+OitPb|fMT<&1H$E&p6g8eVPo-Wk}c94U>{t1D3}-J%J1M@<+ld|0$liZe-q# zy8_c}G`%oRIx^Rcu)=>lFLoZT3yzZ6b0L{C?>tw3*9)dq=&f1hcSzz)e?NP+Cb(9a z3DPQGxHtdMQ!s6v;@x3YChQuCp%i}EwwR+spa?e_BEK|C-u?Kn<$Ylk#hi<8wxGf<4ZY4b9L`uV3FQ42kf~Q0 zLMy_z4RC1Y=&fi;je~nej1|LzGgk^0tle{9h^k$tUyL1J1q_Hx9F2dc;k2^$OeBjz ziD_R2j1DAnm`Zj7oTkqZute3a$E$#}!s`#-jO+?HO`jq6=SN6npzF)J`p21=;dTR@ zrq7T^pK~N6bH-YU5t-8D;`RxG^5En{`E}WfUpH{j$*)gHKw^Hm0z_GG^1*zaaJGO> zTwLk0r#2tX*WuQxE_RwE)gbd8!PzDWwl6F=wFLjurCCqmpuI0rB%%syWd=)3kBdTG z8D~bFF;}UVCXz);WG}3BlK%LKsLNKj9@0xVFtiOM%s?M=Y(qcB@{QHd&CBv-*LvaB zf0~-J85STIaj>_#ePP~;L2uyxjawL;HvwWu#8QnV#;cEME_L|rD4`T?**_TDw+XOp z#g16|+K!C;Q~ES%AHHI4m||>~CWZfqrMlUGH)rKiSmxfh47cp@RTCUXptCe{?HqcY zB_WwNDY^5Y&xznTBCPO*X2fIq?HHjIz8DnQ(>^zX;|Lr}V5x4TC;xs!L6<>w;7Ti+XZ3vC?UO Se9Kn=0000qT-l$$#siwm)^Bc-H|d9Hq4bXEz%A3_q?urcBZmIve~g;j_Z)MWX4ve<1C#F zVV}R*N1wc=XrZB^7USwA3O~&lrcS7l4qtpVi|I%F)6xTb>YBdwz4KGeZjQOI zW~V_@cjeotN!@onJE|i!jxKxfw~Se;+|D=3I+F3?>1l=sPCbl?&Y$^(|6p)tsIfta z=4J-N@_HHOJ@+;r3e52N%x-oo$1v+JpY?As!vm8H7}Gl?A2qye_^JCQp~~>UpKBU- zo=@vwcC);Eep~a~gA9}RIab)kDszSJ|Ku>mxGpL9dqvLllMkIQojc~XolTqZ^vcW| z-}#0A@0pad;kZgt!}CR~T#4MVKpAf9#|4vTEkB*0nvhn^BFBBYL~;$w6!q6nFZoVC z$ninZn0ryXYF*XVv}QpCU14=o=^lp6nLCm;ALN)Yt<&2a#GSFDZ5EK**13AMB$zu3 z!kv7DXPWTCo)DiH!z9)-36_TZ-batfvYcs<)Ny~%GwZ+6Cs{G$h<-Wdn}3)ZE*k`f T#ypb-Ml^$`tDnm{r-UW|=U3WJ literal 0 HcmV?d00001 diff --git a/_resources/icons/restart-40.png b/_resources/icons/restart-40.png new file mode 100644 index 0000000000000000000000000000000000000000..a49c9ffbbb85260ad1791196d06772235d74cd71 GIT binary patch literal 1554 zcmV+t2JQKYP)lhR?)g9Kay=l2h!GT?5tT8IsG2h^MpVbs$>2ow8+V2B z5m#~OSw}#!qUz-djjnIGVg~e^(=Lyw{gW0Tro)ASjtD2|cX&+CdPF7H8IU+VNY5+) zE06qbR%^qi&~V9IwBcA75#xee&~oMt;EENeALS&iwV?9n(SUvw-6K4v=RM^=J~>BlO^o&v#{nwl*4*AC#t0=9^IE`1vp7=;m9i-(YuRkJ7OTq`e<+=glTm~;2^@h z{!nC-k`Mv{3o6?ptfcSF&u>})e4M240Ma9*&x5H1T0&TFD5yLhv4X4$UNd=O#5ghd z#>@ipn-(Cf4~h+!l3utpa3T&am7kLoo)wk5t~rtU5F*BbqT0@g)j}2f2TVlh#aXMz z;*D*$tUmH-{e^Lewsa|h5fwI@)P*oTw{GvnaqC?leswJD7PNQM9^{G9E$kmms9w2d zB21&XQt)NhJQE}73lXLfxMT9Z^6&e>)E(0v$Q6UnbCQ0$T1zD3)jN9bLIk=TB90jQ z)_&JJmT;#VCX#3j@~@4V6_l0Bx1Newea}mbh!fhIB#)rI#*N-Dfh(1G zOb>jv_u>?z+%yE{9dJ2JJf?q4=2Tc^d-_Zy(?&ZZG5Y1^Kdr%G@|f;&9H6Avm(}-8 z-AkH=zz=(Ej2zZ)Rt6L0XyvzEx54aA1N4Z>+Ev@SrpoDt!+(M0uG$z`Q5~&T69H0G z(|*e%XnBqU6oQM2Hg|@tMS=CHckGNlZPXgU#am8>8K1J)aezK;3EX9kWKfokk(2Z= zl$=S%lDh6OMo`x|4p3CeOSbn+r5fmZIEmh}G4lBT2@-_qZflT0_TY)}tBui1jKk&o z5@`lPpTqRB^8od$)-+STuix~_p@TL?kDz|CeCw&GwKnGYLt#!*UUdo_Bk2qC{YR(# zFYfzWPevI*DYh}c?^9mlu@SQdO6iVsBOKQEI|UG7+PG%t`O&0OhiQ!U(HEyZz!Q4b z+G;^h2os$XT4bPEAT(<2JE2kGiP4qz5ahjr%C;nxLz@n*(R*vO$L9-Nj@kzq7w@-U3vlmMG?q!>kUkD)K)g0E( zLz|S9&q?$bkYNP}3kEbK(YlOlj?K#Dpn87 z#%Jd=c1{lNFhH%IW^f1dLwd;bhr&prSD+d|S%kU@3-<60l5n2?Xc%~{E@K6Uus)Dm zp*%e&a8{5or+~SqyC5)8aiCPKuIm|tq7Mu9@a@Y()BoWFJ_qwLBF34l!KKWyJ7HE9 z8k3_tki~*%1z9XMw$ItDGZ8BU-v*OIo)j7e<5@qDAt>MlV2d}lg&~zNg8HV*34%Nc zvon|mkx&$BH_S0|^H97^y7%|ojrbnE!EeP|PDY`8@x(ao7F2H5JU3qi^^y^kVlOcc zLVE-~9P86YV8Nc3jXs{xW{;>XL!WCe{3oCukjqa00;CO5b?Pc(od5s;07*qoM6N<$ Ef-&jnrT_o{ literal 0 HcmV?d00001 diff --git a/_resources/icons/save-as-40.png b/_resources/icons/save-as-40.png new file mode 100644 index 0000000000000000000000000000000000000000..547c840a17307d8c9a73fa757ffe5bf12185c248 GIT binary patch literal 840 zcmV-O1GoH%P)(bdXE|{Zx@m z0{v8wOauL?kpBX3MrVhw_yR`Q9E`Eq7B7c$BBwy_U*P-quszeF``QhJ#A0kqrI_RM zqcJ2UV58WUa8buD+e~q^{^ejUehZn3gvnqEKMFt`1%nD@+OK=~>)E zO3K?vWTroLf+`gpj@iB57PA($%_dAPZD4rjD~bFhZ$L;QftSr*qXf)Vyze_8QMBTf za|{b>VKVN|%aF)5u=B4+Mp&#Xi~+|TMhuxRVP#&8nkFr}-P0s+^2-LQ8w_}UU-W_U zw>bMa6N!tisDO|G-vS*ZGB(L4EoM{`I;3^YC~z#QpFQ7_;4iNyN!))JjAmKhs*r$UQhnA+%5MD0K`xYW+VGl*J|6|EPs2vVZ>rz~joxtbPM_h3jqb SEQ6^40000E|HP)YGHO-Y+n%Lt#@PM9m4p z!BF57LdF!vs)(iC2B-a_u&q#9l?fRQ>^XqLaroWLn4jkj!S5hPt}wRwt0)fojyW7_ zP|q150X98Jh^i3sg(o;<77`*%%o%+Egcgq+sVj{A?wQ@75@cAIcry9~2z?QY!HZc} z5(YH`=$w?$l*^$gqAwa^e;8H1WE-&u@SXc-QP``AE zbJOJJvuBPU*wB~5!zwCH7eJJ+w;mP3xP6CgZPok*1yl zu;eA_CmSGRt8T=s&&=3HH#S_28h&UdmEzl_lKrvg&pWPrH!;EUl>TWSF(E2?IH$$6 z8#kH;&84NjdC**1vP1FeRmU}zsVOcqR%rsviK2-{({bauIeX)K_xc8C+`n(Ho11f7 zQ=OjXG9iXPfOqfu0;u`aPyjuT_}Vr5hzo_j0h(cs*mshYN}g3f>!qDZGBe|vBn8I) zXs4O6F?XY?Y8#!M4GmDAowYx-TB=0q{w znk3(Ombx=%dX_q^S8@a?br@3x;hXkmfw8sq0L_90GVQ~Y>2y0dynFMeXR`n--R%}3 zr!cpA1vpxzR;d?@J2B}LOR1Fgto2weCV2YPyWJWZsvzXL0HR4mv*)2#kQf$If(` z>*vl{Rl&G($MRI|`gOi__N;F@dW*!M6yE#X6I}DC1>qnj{vd<97E&=N;kr(y^!rE< z!F2>cdd(?Xp9;@e_lk@qB4GsA5pX?*>fHucOe9R$4(z#3!F2>Cehk$(j=qmHndHl{ zSOp2;JLYk2p?-?VBgW2>kT|H>7xlc1Q(qL@)AoyUNKrWc(#6u;5Wp=H7vSrotiD4_le Z`2fLOTJ@8?y^;U`002ovPDHLkV1fkwZA<_F literal 0 HcmV?d00001 diff --git a/_resources/images/main_icon.png b/_resources/images/main_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5770cc449ea2d5591c392cde89172247a93e5fec GIT binary patch literal 410 zcmV;L0cHM)P)?Uw8Cgd+{x?0#IXXn-U<@K1d&mmD(Km5)V8X!BB@p6obc+N8T4-tTJrEkXiDQ-Oe#l29A7k~^ z!ayGA79Q<*)7ZfMng)dlok_$hWeu#Qu>k-80P!FA1D0C#{UmF7@c;k-07*qoM6N<$ Ef*7!@8UO$Q literal 0 HcmV?d00001 diff --git a/_resources/images/main_title.png b/_resources/images/main_title.png new file mode 100644 index 0000000000000000000000000000000000000000..b0edb75308c671027b78da604ad7c043b525ac80 GIT binary patch literal 5469 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 MYplc2I)CYZ006#56#xJL literal 0 HcmV?d00001 diff --git a/_resources/images/screenshot.png b/_resources/images/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..8cb031044a82aba730c31d4aeeb1a7bfa4cde2a3 GIT binary patch literal 162948 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 literal 0 HcmV?d00001 diff --git a/_resources/main.qrc b/_resources/main.qrc new file mode 100644 index 0000000..f13e3d1 --- /dev/null +++ b/_resources/main.qrc @@ -0,0 +1,6 @@ + + + images/main_icon.png + images/main_title.png + + diff --git a/_resources/main_icon.rc b/_resources/main_icon.rc new file mode 100644 index 0000000..59f679d --- /dev/null +++ b/_resources/main_icon.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON "main.ico" diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt new file mode 100644 index 0000000..27dd932 --- /dev/null +++ b/sources/CMakeLists.txt @@ -0,0 +1,87 @@ + +cmake_minimum_required(VERSION 4.0) + +project(opencv_example + VERSION 1.0 + DESCRIPTION "Example OpenCV" + LANGUAGES CXX +) + +include(${CMAKE_CURRENT_SOURCE_DIR}/../_cmake/app_settings.cmake) + +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS + Core Widgets +) + +find_package(OpenCV REQUIRED) + +set(PROJECT_SOURCES + main.cpp + main_window.cpp + main_window.h + main_window.ui + ${COMMON_SOURCES_DIR}/application_config.h + ${COMMON_SOURCES_DIR}/application_config.cpp +) + +set(PROJECT_RESOURCES + ${RESOURCES_DIR}/main.qrc + ${RESOURCES_DIR}/icons.qrc +) + +if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + set(PROJECT_RC_FILES + ${RESOURCES_DIR}/main_icon.rc + ${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc + ) +endif() + +if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) + qt_add_executable(${PROJECT_NAME} + MANUAL_FINALIZATION + ${PROJECT_SOURCES} + ${PROJECT_RESOURCES} + ${PROJECT_RC_FILES} + ) +else() + add_executable(${PROJECT_NAME} + ${PROJECT_SOURCES} + ${PROJECT_RESOURCES} + ${PROJECT_RC_FILES} + ) +endif() + +target_link_directories(${PROJECT_NAME} PRIVATE + ${DISTRIB_DIR} + ${CXX_COMPILER_DIR} +) + +include(${CMAKE_INC_DIR}/target_options.cmake) + +target_link_libraries(${PROJECT_NAME} PRIVATE + Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::Widgets + ${OpenCV_LIBS} +) + +target_include_directories(${PROJECT_NAME} PRIVATE + ${SYSTEM_INCLUDE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${COMMON_SOURCES_DIR} + ${COMPILER_INCLUDE_DIR} + ${OpenCV_INCLUDE_DIRS} +) + +if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + set_target_properties(${PROJECT_NAME} PROPERTIES + WIN32_EXECUTABLE TRUE + ) +endif() + +if(QT_VERSION_MAJOR EQUAL 6) + qt_finalize_executable(${PROJECT_NAME}) +endif() + +include(${CMAKE_INC_DIR}/post_build.cmake) + + diff --git a/sources/main.cpp b/sources/main.cpp new file mode 100644 index 0000000..23954f1 --- /dev/null +++ b/sources/main.cpp @@ -0,0 +1,21 @@ +#include "main_window.h" +#include +#include "application_config.h" + +//============================================================================== +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + + Application::initialize(); + Application::installTranslations(); + + MainWindow w; + + w.show(); + a.setQuitOnLastWindowClosed(true); + + return a.exec(); +} +//============================================================================== + diff --git a/sources/main_window.cpp b/sources/main_window.cpp new file mode 100644 index 0000000..1d47df1 --- /dev/null +++ b/sources/main_window.cpp @@ -0,0 +1,819 @@ +/**************************************************************************** +** Copyright (c) 2025 Evgeny Teterin (nayk) +** All right reserved. +** +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +** NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +** LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +** OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +** WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +** +****************************************************************************/ +#include "main_window.h" +#include "./ui_main_window.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +//============================================================================== +// Функции обработки изображений OpenCV +//============================================================================== +cv::Mat qImageToMat(const QImage &image) +{ + qDebug() << "qImageToMat"; + + cv::Mat result; + + if (image.isNull()) return result; + + QImage img = image.convertToFormat( QImage::Format_RGB888 ); + cv::Mat tmp(img.height(), img.width(), CV_8UC3, + const_cast(img.bits()), + static_cast(img.bytesPerLine())); + + try { + + cv::cvtColor(tmp, result, CV_BGR2RGB); + + } catch (...) { + + return cv::Mat(); + } + + return result.clone(); +} +//============================================================================== +QImage matToQImage(const cv::Mat &mat) +{ + qDebug() << "matToQImage"; + + if(mat.empty()) { + + return QImage(); + } + + cv::Mat temp; + + try { + + cv::cvtColor(mat, temp, CV_BGR2RGB); + + } catch (...) { + + return QImage(); + } + + if(temp.empty()) { + + return QImage(); + } + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QImage dest( const_cast(temp.data), + temp.cols, temp.rows, + static_cast(temp.step), QImage::Format_RGB888); +#else + QImage dest( const_cast(temp.data), + temp.cols, temp.rows, + static_cast(temp.step), QImage::Format_RGB888); +#endif + + if(dest.isNull()) return QImage(); + return dest.copy(); +} +//============================================================================== +cv::Mat applyGain(const cv::Mat &inputImage, double gain) +{ + qDebug() << "applyGain"; + + cv::Mat outputImage; + + if (inputImage.empty()) return outputImage; + + try { + // Умножаем каждый пиксель на коэффициент усиления + inputImage.convertTo(outputImage, -1, gain, 0); + cv::threshold(outputImage, outputImage, 255, 255, cv::THRESH_TRUNC); + } + catch (...) { + + outputImage = cv::Mat(); + } + + return outputImage; +} +//============================================================================== +cv::Mat adjustBrightnessContrast(const cv::Mat &img, double alpha, int beta) +{ + qDebug() << "adjustBrightnessContrast"; + cv::Mat adjusted; + + if (img.empty()) return adjusted; + + try { + + img.convertTo(adjusted, -1, alpha, beta); // alpha - контраст, beta - яркость + cv::threshold(adjusted, adjusted, 255, 255, cv::THRESH_TRUNC); + } + catch (...) { + + adjusted = cv::Mat(); + } + + return adjusted; +} +//============================================================================== +cv::Mat equalizeColorHist(const cv::Mat &bgrImg) +{ + qDebug() << "equalizeColorHist"; + + cv::Mat result; + + if (bgrImg.empty()) return result; + + try { + + cv::Mat ycrcb; + cv::cvtColor(bgrImg, ycrcb, cv::COLOR_BGR2YCrCb); + std::vector channels; + cv::split(ycrcb, channels); + cv::equalizeHist(channels[0], channels[0]); // Эквализация только по Y (яркость) + cv::merge(channels, ycrcb); + cv::cvtColor(ycrcb, result, cv::COLOR_YCrCb2BGR); + } + catch (...) { + + result = cv::Mat(); + } + + return result; +} +//============================================================================== +cv::Mat sharpenLaplacian(const cv::Mat &img) +{ + qDebug() << "sharpenLaplacian"; + cv::Mat result; + + if (img.empty()) return result; + + try { + + cv::Mat sharpened; + cv::Laplacian(img, sharpened, CV_8U, 3); + result = img - 0.5 * sharpened; // Можно регулировать силу эффекта + } + catch (...) { + + result = cv::Mat(); + } + + return result; +} +//============================================================================== +cv::Mat unsharpMask(const cv::Mat &img, double sigma, double amount) +{ + qDebug() << "unsharpMask"; + cv::Mat result; + + if (img.empty()) return result; + + try { + + cv::Mat blurred; + cv::GaussianBlur(img, blurred, cv::Size(0, 0), sigma); + result = img * (1 + amount) - blurred * amount; + } + catch (...) { + + result = cv::Mat(); + } + + return result; +} +//============================================================================== +cv::Mat denoiseMedian(const cv::Mat &img, int kernelSize = 3) +{ + qDebug() << "denoiseMedian"; + cv::Mat denoised; + + if (img.empty()) return denoised; + + try { + + cv::medianBlur(img, denoised, (kernelSize % 2 == 0) ? kernelSize + 1 : kernelSize); + } + catch (...) { + + denoised = cv::Mat(); + } + + return denoised; +} +//============================================================================== +cv::Mat denoiseNlm(const cv::Mat &img, float h = 10) +{ + qDebug() << "denoiseNLM"; + cv::Mat denoised; + + if (img.empty()) return denoised; + + try { + + cv::fastNlMeansDenoisingColored(img, denoised, h); + } + catch (...) { + + denoised = cv::Mat(); + } + + return denoised; +} +//============================================================================== +cv::Mat autoExposure(const cv::Mat &img) +{ + qDebug() << "autoExposure"; + cv::Mat result; + + if (img.empty()) return result; + + try { + + cv::Mat lab; + cv::cvtColor(img, lab, cv::COLOR_BGR2Lab); + std::vector channels; + cv::split(lab, channels); + cv::Ptr clahe = cv::createCLAHE(); + clahe->setClipLimit(2.0); + clahe->apply(channels[0], channels[0]); // Применяем CLAHE к каналу L + cv::merge(channels, lab); + cv::cvtColor(lab, result, cv::COLOR_Lab2BGR); + } + catch (...) { + + result = cv::Mat(); + } + + return result; +} +//============================================================================== +cv::Mat grayWorldWb(const cv::Mat &img) +{ + qDebug() << "grayWorldWB"; + cv::Mat balanced; + + if (img.empty()) return balanced; + + try { + + cv::Scalar avg = cv::mean(img); + double avgGray = (avg[0] + avg[1] + avg[2]) / 3; + balanced = img.clone(); + balanced.forEach([&](cv::Vec3b &pixel, const int*) { + pixel[0] = cv::saturate_cast(pixel[0] * avgGray / avg[0]); + pixel[1] = cv::saturate_cast(pixel[1] * avgGray / avg[1]); + pixel[2] = cv::saturate_cast(pixel[2] * avgGray / avg[2]); + }); + } + catch (...) { + + balanced = cv::Mat(); + } + + return balanced; +} +//============================================================================== +cv::Mat enhanceColors(const cv::Mat &img, float saturationFactor = 1.5) +{ + qDebug() << "enhanceColors"; + cv::Mat result; + + if (img.empty()) return result; + + try { + + cv::Mat hsv; + cv::cvtColor(img, hsv, cv::COLOR_BGR2HSV); + hsv.forEach([&](cv::Vec3b &pixel, const int*) { + pixel[1] = cv::saturate_cast(pixel[1] * saturationFactor); // Усиливаем насыщенность + }); + + cv::cvtColor(hsv, result, cv::COLOR_HSV2BGR); + } + catch (...) { + + result = cv::Mat(); + } + + return result; +} +//============================================================================== +cv::Mat removeVignette(const cv::Mat &img, double strength = 0.5) +{ + qDebug() << "removeVignette"; + cv::Mat result; + + if (img.empty()) return result; + + try { + + cv::Mat mask(img.size(), CV_32F); + int centerX = img.cols / 2; + int centerY = img.rows / 2; + double radius = std::sqrt(centerX * centerX + centerY * centerY); + + for (int y = 0; y < img.rows; ++y) { + + for (int x = 0; x < img.cols; ++x) { + + double dist = std::sqrt((x - centerX) * (x - centerX) + (y - centerY) * (y - centerY)); + double factor = 1.0 - strength * (dist / radius); + + mask.at(y, x) = static_cast( std::max(factor, 0.1) ); // Чтобы не было деления на 0 + } + } + + cv::Mat imgFloat; + img.convertTo(imgFloat, CV_32F); + + std::vector channels; + cv::split(imgFloat, channels); + + for (auto &channel : channels) { + + channel = channel / mask; + } + cv::merge(channels, imgFloat); + + + imgFloat.convertTo(result, CV_8U); + } + catch (...) { + + result = cv::Mat(); + } + + return result; +} +//============================================================================== +cv::Mat applyClache(const cv::Mat &img) +{ + qDebug() << "applyCLAHE"; + cv::Mat result; + + if (img.empty()) return result; + + try { + + cv::Mat lab; + cv::cvtColor(img, lab, cv::COLOR_BGR2Lab); + + std::vector channels; + cv::split(lab, channels); + + cv::Ptr clahe = cv::createCLAHE(); + clahe->setClipLimit(2.0); + clahe->apply(channels[0], channels[0]); + + cv::merge(channels, lab); + + cv::cvtColor(lab, result, cv::COLOR_Lab2BGR); + } + catch (...) { + + result = cv::Mat(); + } + + return result; +} + +//============================================================================== +// Форма просмотра изображения +//============================================================================== +ImageViewer::ImageViewer(const QImage &image, QWidget *parent) : QWidget(parent) +{ + setWindowFlags( windowFlags() | Qt::Dialog); + setAttribute(Qt::WA_DeleteOnClose, true); + setMinimumSize(300, 200); + + labelImage = image; + label = new QLabel(this); + label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + label->setAlignment(Qt::AlignCenter); + label->setMinimumSize(1, 1); // Позволяет уменьшать окно + + QVBoxLayout *layout = new QVBoxLayout(this); + layout->addWidget(label); + + QHBoxLayout *hLayout = new QHBoxLayout(); + hLayout->addStretch(); + + QPushButton *btn = new QPushButton(this); + btn->setText(tr("Сохранить как...")); + + connect(btn, &QPushButton::clicked, this, &ImageViewer::save); + + hLayout->addWidget(btn); + layout->addLayout(hLayout); + + setLayout(layout); + updateImage(); +} +//============================================================================== +void ImageViewer::resizeEvent(QResizeEvent *event) +{ + QWidget::resizeEvent(event); + updateImage(); +} +//============================================================================== +void ImageViewer::updateImage() +{ + if (!label) return; + + label->clear(); + + if (!labelImage.isNull()) { + + QPixmap pixmap = QPixmap::fromImage(labelImage); + label->setPixmap(pixmap.scaled(label->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); + } +} +//============================================================================== +void ImageViewer::save() { + + QString fileName = QFileDialog::getSaveFileName( + this, tr("Сохранить изображение"), + QString(), + QString("Изображения png (*.png)") + ); + + if (fileName.isEmpty()) return; + + if (labelImage.save(fileName)) { + + QMessageBox::information(this, tr("Игформация"), tr("Файл сохранён")); + } + else { + + QMessageBox::critical(this, tr("Ошибка"), tr("Ошибка при сохранении файла")); + } +} +//============================================================================== + + +//============================================================================== +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , ui(new Ui::MainWindow) +{ + ui->setupUi(this); + initialize(); + updateControls(); + actionsEnabled = true; +} +//============================================================================== +MainWindow::~MainWindow() +{ + delete ui; +} +//============================================================================== +void MainWindow::resizeEvent(QResizeEvent *event) +{ + QMainWindow::resizeEvent(event); + updateLabelImage(); +} +//============================================================================== +void MainWindow::initialize() +{ + QString title = qGuiApp->applicationDisplayName().isEmpty() + ? qGuiApp->applicationName() + : qGuiApp->applicationDisplayName(); + + if (!title.isEmpty()) this->setWindowTitle( title ); + + connect(ui->actionExit, &QAction::triggered, this, &MainWindow::close); + connect(ui->actionOpen, &QAction::triggered, this, &MainWindow::onActionOpen); + connect(ui->actionSave, &QAction::triggered, this, &MainWindow::onActionSaveAs); + connect(ui->actionShowImage, &QAction::triggered, this, &MainWindow::onActionShowImage); + connect(ui->actionUndo, &QAction::triggered, this, &MainWindow::onActionUndo); + connect(ui->actionReset, &QAction::triggered, this, &MainWindow::onActionReset); + connect(ui->pushButtonGain, &QPushButton::clicked, this, &MainWindow::btnGain); + connect(ui->pushButtonBrightnessAndContrast, &QPushButton::clicked, this, &MainWindow::btnBrightnessAndContrast); + connect(ui->pushButtonHistogramEqual, &QPushButton::clicked, this, &MainWindow::btnHistogramEqual); + connect(ui->pushButtonLaplacian, &QPushButton::clicked, this, &MainWindow::btnLaplacian); + connect(ui->pushButtonUnsharpMask, &QPushButton::clicked, this, &MainWindow::btnUnsharpMask); + connect(ui->pushButtonMedian, &QPushButton::clicked, this, &MainWindow::btnMedian); + connect(ui->pushButtonFastNlMeans, &QPushButton::clicked, this, &MainWindow::btnFastNlMeans); + connect(ui->pushButtonAutoExposure, &QPushButton::clicked, this, &MainWindow::btnAutoExposure); + connect(ui->pushButtonWhiteBalance, &QPushButton::clicked, this, &MainWindow::btnWhiteBalance); + connect(ui->pushButtonSaturation, &QPushButton::clicked, this, &MainWindow::btnSaturation); + connect(ui->pushButtonVinete, &QPushButton::clicked, this, &MainWindow::btnVinete); + connect(ui->pushButtonClahe, &QPushButton::clicked, this, &MainWindow::btnClahe); + + ui->labelImage->setMinimumSize(1, 1); + ui->scrollArea->verticalScrollBar()->setValue(0); + imgList.reserve(maximumImagesCount); +} +//============================================================================== +cv::Mat MainWindow::prepareImage(const QString &operationName) +{ + if (imgList.isEmpty()) return cv::Mat(); + + qDebug() << operationName; + + return qImageToMat(imgList.last()); +} +//============================================================================== +void MainWindow::finallyImage(const cv::Mat &output) +{ + if (output.empty()) { + + qCritical() << "Ошибка при выполнении"; + } + else { + + imgList.append( matToQImage(output) ); + + while (imgList.size() > maximumImagesCount) imgList.removeAt(1); + + } + + updateLabelImage(); + updateControls(); + + if (output.empty()) { + + QMessageBox::critical(this, tr("Ошибка"), tr("Ошибка при выполнении")); + } +} +//============================================================================== +void MainWindow::updateLabelImage() +{ + ui->labelImage->clear(); + + QImage currentImage; + + if (!imgList.isEmpty()) currentImage = imgList.last(); + + if (currentImage.isNull()) { + + ui->labelImage->setText(tr("Изображение не загружено")); + return; + } + + QPixmap pixmap = QPixmap::fromImage(currentImage); + ui->labelImage->setPixmap( + pixmap.scaled(ui->labelImage->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation) + ); +} +//============================================================================== +void MainWindow::updateControls() +{ + bool imageExist = !imgList.isEmpty() && !imgList.last().isNull(); + + ui->widget->setEnabled( imageExist ); + ui->actionShowImage->setEnabled( imageExist ); + ui->actionSave->setEnabled( imageExist ); + ui->actionUndo->setEnabled( imgList.size() > 1 ); + ui->actionReset->setEnabled( imgList.size() > 1 ); +} +//============================================================================== +void MainWindow::onActionOpen() +{ + QString fileName = QFileDialog::getOpenFileName( + this, tr("Открыть изображение"), + QString(), + QString("Файлы изображений (*.png *.jpg *.jpeg)") + ); + + if (fileName.isEmpty()) return; + + qDebug() << "Загрузка из файла: " << fileName; + + ui->labelImage->clear(); + imgList.clear(); + + QImage tmpImage( fileName ); + + if (tmpImage.isNull()) { + + qCritical() << "После загрузки изображение isNull"; + } + + if (!tmpImage.isNull()) { + + imgList.append(tmpImage); + } + + updateLabelImage(); + updateControls(); + + if (tmpImage.isNull()) { + + qCritical() << "Ошибка при загрузке"; + QMessageBox::critical(this, tr("Ошибка"), tr("Ошибка при загрузке файла")); + } +} +//============================================================================== +void MainWindow::onActionSaveAs() +{ + if (imgList.isEmpty()) return; + + QString fileName = QFileDialog::getSaveFileName( + this, tr("Сохранить изображение"), + QString(), + QString("Изображения png (*.png)") + ); + + if (fileName.isEmpty()) return; + + qDebug() << "Сохранение в файл: " << fileName; + + if (imgList.last().save(fileName)) { + + QMessageBox::information(this, tr("Информация"), tr("Файл сохранён")); + } + else { + + qCritical() << "Ошибка при сохранении"; + QMessageBox::critical(this, tr("Ошибка"), tr("Ошибка при сохранении файла")); + } +} +//============================================================================== +void MainWindow::onActionShowImage() +{ + if (imgList.isEmpty()) return; + + ImageViewer *w = new ImageViewer(imgList.last(), this); + w->show(); +} +//============================================================================== +void MainWindow::onActionUndo() +{ + if (imgList.size() > 1) imgList.removeLast(); + + updateLabelImage(); + updateControls(); +} +//============================================================================== +void MainWindow::onActionReset() +{ + while (imgList.size() > 1) imgList.removeLast(); + + updateLabelImage(); + updateControls(); +} +//============================================================================== +void MainWindow::btnGain() +{ + if (imgList.isEmpty()) return; + + cv::Mat input = prepareImage("Простое усиление яркости"); + cv::Mat output = applyGain(input, ui->doubleSpinBoxGain->value()); + + finallyImage(output); +} +//============================================================================== +void MainWindow::btnBrightnessAndContrast() +{ + if (imgList.isEmpty()) return; + + cv::Mat input = prepareImage("Яркость и контраст"); + cv::Mat output = adjustBrightnessContrast(input, + ui->doubleSpinBoxBrightness->value(), + ui->spinBoxContrast->value()); + + finallyImage(output); +} +//============================================================================== +void MainWindow::btnHistogramEqual() +{ + if (imgList.isEmpty()) return; + + cv::Mat input = prepareImage("Гистограммная эквализация"); + cv::Mat output = equalizeColorHist(input); + + finallyImage(output); +} +//============================================================================== +void MainWindow::btnLaplacian() +{ + if (imgList.isEmpty()) return; + + cv::Mat input = prepareImage("Фильтр Лапласа"); + cv::Mat output = sharpenLaplacian(input); + + finallyImage(output); +} +//============================================================================== +void MainWindow::btnUnsharpMask() +{ + if (imgList.isEmpty()) return; + + cv::Mat input = prepareImage("Размытие + вычитание"); + cv::Mat output = unsharpMask(input, ui->doubleSpinBoxSigma->value(), + ui->doubleSpinBoxAmount->value() ); + + finallyImage(output); +} +//============================================================================== +void MainWindow::btnMedian() +{ + if (imgList.isEmpty()) return; + + if (ui->spinBoxMedian->value() % 2 == 0) + ui->spinBoxMedian->setValue( ui->spinBoxMedian->value() + 1 ); + + cv::Mat input = prepareImage("Медианный фильтр"); + cv::Mat output = denoiseMedian(input, ui->spinBoxMedian->value() ); + + finallyImage(output); +} +//============================================================================== +void MainWindow::btnFastNlMeans() +{ + if (imgList.isEmpty()) return; + + cv::Mat input = prepareImage("OpenCV FastNlMeans"); + cv::Mat output = denoiseNlm(input, static_cast(ui->doubleSpinBoxFastNlMeans->value()) ); + + finallyImage(output); +} +//============================================================================== +void MainWindow::btnAutoExposure() +{ + if (imgList.isEmpty()) return; + + cv::Mat input = prepareImage("Автокорректировка экспозиции"); + cv::Mat output = autoExposure(input); + + finallyImage(output); +} +//============================================================================== +void MainWindow::btnWhiteBalance() +{ + if (imgList.isEmpty()) return; + + cv::Mat input = prepareImage("Баланс белого"); + cv::Mat output = grayWorldWb(input); + + finallyImage(output); +} +//============================================================================== +void MainWindow::btnSaturation() +{ + if (imgList.isEmpty()) return; + + cv::Mat input = prepareImage("Цветовая насыщенность"); + cv::Mat output = denoiseNlm(input, static_cast(ui->doubleSpinBoxSaturation->value()) ); + + finallyImage(output); +} +//============================================================================== +void MainWindow::btnVinete() +{ + if (imgList.isEmpty()) return; + + cv::Mat input = prepareImage("Коррекция виньетирования"); + cv::Mat output = removeVignette(input, ui->doubleSpinBoxVinete->value() ); + + finallyImage(output); +} +//============================================================================== +void MainWindow::btnClahe() +{ + if (imgList.isEmpty()) return; + + cv::Mat input = prepareImage("Адаптивное выравнивание гистограммы"); + cv::Mat output = applyClache(input); + + finallyImage(output); +} +//============================================================================== + diff --git a/sources/main_window.h b/sources/main_window.h new file mode 100644 index 0000000..fb4e60a --- /dev/null +++ b/sources/main_window.h @@ -0,0 +1,120 @@ +/**************************************************************************** +** Copyright (c) 2025 Evgeny Teterin (nayk) +** All right reserved. +** +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +** NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +** LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +** OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +** WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +** +****************************************************************************/ +#pragma once +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +#include + +#include + +//============================================================================== +QT_BEGIN_NAMESPACE +namespace Ui { +class MainWindow; +} + +class QLabel; +class QResizeEvent; + +QT_END_NAMESPACE + +//============================================================================== +// Форма для показа изображения в отдельном окне +//============================================================================== +class ImageViewer : public QWidget { + Q_OBJECT + +public: + ImageViewer(const QImage &image, QWidget *parent = nullptr); + +protected: + void resizeEvent(QResizeEvent *event) override; + +private: + QLabel *label; + QImage labelImage; + // + void updateImage(); + +private slots: + void save(); +}; + +//============================================================================== +// Главное окно +//============================================================================== +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +protected: + void resizeEvent(QResizeEvent *event) override; + +private: + const int maximumImagesCount {15}; + + Ui::MainWindow *ui; + bool actionsEnabled {false}; + QList imgList; + // + void initialize(); + cv::Mat prepareImage(const QString &operationName); + void finallyImage(const cv::Mat &output); + +private slots: + void updateControls(); + void updateLabelImage(); + // + void onActionOpen(); + void onActionSaveAs(); + void onActionShowImage(); + void onActionUndo(); + void onActionReset(); + // + void btnGain(); + void btnBrightnessAndContrast(); + void btnHistogramEqual(); + void btnLaplacian(); + void btnUnsharpMask(); + void btnMedian(); + void btnFastNlMeans(); + void btnAutoExposure(); + void btnWhiteBalance(); + void btnSaturation(); + void btnVinete(); + void btnClahe(); +}; + +#endif // MAINWINDOW_H +//============================================================================== diff --git a/sources/main_window.ui b/sources/main_window.ui new file mode 100644 index 0000000..79efafa --- /dev/null +++ b/sources/main_window.ui @@ -0,0 +1,693 @@ + + + MainWindow + + + + 0 + 0 + 1085 + 686 + + + + MainWindow + + + + :/images/main_icon.png:/images/main_icon.png + + + + + + + + 0 + 0 + + + + + 300 + 0 + + + + + 300 + 16777215 + + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + true + + + + + 0 + 0 + 284 + 1300 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 1300 + + + + + + + + 0 + 0 + + + + Корректировка + + + + + + Автокорректировка экспозиции + + + + + + + Баланс белого + + + + + + + Гистограммная эквализация + + + + + + + Резкость - Фильтр Лапласа + + + + + + + Адаптивное выравнивание + + + + + + + + + + + 0 + 0 + + + + Простая регулировка яркости + + + + + + + + Множитель: + + + + + + + 1000.000000000000000 + + + 0.100000000000000 + + + 1.500000000000000 + + + + + + + + + > 1 - увеличение яркости + + + + + + + < 1 - уменьшение яркости + + + + + + + Применить + + + + + + + + + + + 0 + 0 + + + + Яркость и контраст + + + + + + + + Яркость: + + + + + + + 1000.000000000000000 + + + 0.100000000000000 + + + 1.500000000000000 + + + + + + + + + > 1 - увеличение яркости + + + + + + + < 1 - уменьшение яркости + + + + + + + + + Контраст: + + + + + + + -1000 + + + 1000 + + + 2 + + + + + + + + + > 0 - увеличение контраста + + + + + + + < 0 - уменьшение контраста + + + + + + + Применить + + + + + + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Резкость - Размытие и вычитание + + + + + + + + Сигма: + + + + + + + 1000.000000000000000 + + + 3.000000000000000 + + + + + + + Вычитание: + + + + + + + 1000.000000000000000 + + + 2.000000000000000 + + + + + + + + + Применить + + + + + + + + + + + 0 + 0 + + + + Удаление шума - Медианный фильтр + + + + + + + + Параметр k: + + + + + + + 1 + + + 2 + + + 5 + + + + + + + + + Применить + + + + + + + + + + + 0 + 0 + + + + Удаление шума - OpenCV FastNlMeans + + + + + + + + Параметр h: + + + + + + + 1000.000000000000000 + + + 10.000000000000000 + + + + + + + + + Применить + + + + + + + + + + + 0 + 0 + + + + Улучшение цветовой насыщенности + + + + + + + + Сатурация: + + + + + + + 1000.000000000000000 + + + 1.500000000000000 + + + + + + + + + Применить + + + + + + + + + + + 0 + 0 + + + + Коррекция виньетирования + + + + + + + + Сила коррекции: + + + + + + + 3 + + + 1.000000000000000 + + + 0.100000000000000 + + + 0.200000000000000 + + + + + + + + + Применить + + + + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + Изображение не загружено + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + + 0 + 0 + 1085 + 21 + + + + + Файл + + + + + + + + + Правка + + + + + + + Вид + + + + + + + + + + toolBar + + + + 32 + 32 + + + + TopToolBarArea + + + false + + + + + + + + + + + :/icons/opened-folder-40.png:/icons/opened-folder-40.png + + + Открыть... + + + + + + :/icons/save-as-40.png:/icons/save-as-40.png + + + Сохранить как... + + + + + + :/icons/shutdown-40.png:/icons/shutdown-40.png + + + Выход + + + + + + :/icons/restart-40.png:/icons/restart-40.png + + + Отменить последнее преобразование + + + + + + :/icons/close-40.png:/icons/close-40.png + + + Отменить все (загрузить исходный) + + + + + + :/icons/change-theme-40.png:/icons/change-theme-40.png + + + Показать изображение в отдельном окне + + + + + + + + +