1. Происхождение Effect-Designer
Effect-Designer — это внешний вид и работа, имитирующие инструменты для создания видеоэффектов Douyin (抖音) на платформе Windows, которые были созданы как C++ с открытым исходным кодом. Первоначально он был разработан для внутреннего использования в компании для создания коротких видеоприложений. Из-за ограниченных ресурсов на ранних этапах разработки, более 90% интерфейса и функций инструмента были заимствованы из инструментов для создания эффектов Douyin. Даже изображения в интерфейсе были взяты из инструмента Douyin с помощью Photoshop. Таким образом, этот инструмент можно считать уменьшенной версией инструментов для создания видеоэффектов Douyin.
Впоследствии проект был остановлен компанией из-за конфликтов с другими командами и планами компании. После этого проект оставался заброшенным. Проект занял несколько месяцев работы и усилий автора, и его готовность составляет более 90%. Автор считает, что отказ от проекта является потерей. В то же время интерфейс программного обеспечения использует REDM (REDM), который считается лучшим открытым исходным кодом для пользовательского интерфейса Windows DUI (DUI). REDM полностью основан на Windows API и предоставляет набор инструментов для разработки пользовательских интерфейсов. Этот инструмент имеет преимущества в простоте использования, удобстве расширения и компактности сгенерированных продуктов. Автор считает, что код проекта имеет определённую ценность для изучения и ссылки.
С открытым отношением автор решил сделать код открытым для всех, чтобы они могли учиться и общаться друг с другом. Учитывая ограниченные личные способности, опыт и время, автор надеется получить обратную связь и обсуждение...
2. Информация о проекте
2.1 Происхождение и назначение программного обеспечения
Компания использовала сторонний инструмент для создания материалов для коротких видео, который предоставлял эффекты. Инструмент имел грубый интерфейс и неудобные операции, что делало его неподходящим для новичков или неспециалистов. Поэтому компания решила разработать собственный инструмент для создания видеоэффектов, подходящий для обычных пользователей.
Инструмент не связан с обработкой изображений или распознаванием лиц. Алгоритмы обработки изображений предоставляются сторонним инструментом. Основная функция программного обеспечения заключается в анализе и редактировании пакетов материалов сторонних инструментов, включая файлы JSON и изображения. Эти материалы создаются сторонними инструментами. Программное обеспечение позволяет читать или создавать пакеты материалов, анализировать их с помощью файлов JSON и отображать соответствующие элементы на экране. Затем пользователи могут редактировать эти элементы или изменять их свойства. Наконец, программное обеспечение может создавать новые пакеты материалов. Эти пакеты могут быть импортированы на мобильные устройства и обработаны сторонним инструментом.
Программное обеспечение предоставляет обзор основных функций:
2.2 Создание проекта
Весь проект управляется CMake. Пользователи могут создавать соответствующие решения SLN в соответствии со своей версией VS.
3. Предварительный анализ части кода
3.1 Функции редактирования интерфейса Undo и Redo
Функции редактирования интерфейса поддерживают операции Undo и Redo. Эти операции не являются конкретными действиями, а представляют собой абстрактные классы действий. Автор определяет эти действия как ActionSlot. У этого класса есть две абстрактные функции PerformUndoActionSlot() и PerformRedoActionSlot(), которые выполняют конкретные операции Undo и Redo соответственно.
Реализация функций Undo и Redo аналогична функциям «Назад» и «Вперёд» в браузере. Данные сохраняются в стеке, где новые данные добавляются при поступлении, а старые данные удаляются при удалении. Автор использует двусвязный список для реализации стека.
3.2 Реализация установки иконки в трее
Ранее автор создал одноэлементный класс во время работы над REDM и предоставил интерфейс InstallIcon для достижения цели вызова интерфейса. Однако автор обнаружил, что реализация одноэлементного класса была некрасивой. Теперь автор использует наследование и шаблоны для реализации класса DMTrayIconImpl. Любой интерфейс, желающий реализовать установку иконки в трее, может наследовать этот класс и вызывать интерфейс InstallIcon.
3.3 Анализ элементов JSON в пакетах ресурсов
Пакеты исходных материалов содержат файлы JSON, определяющие структуру различных элементов, таких как backgroundEdge, beautifyParts, faceExchange, faceMorph, makeups, parts и transitions. Программа должна создать интерфейс на основе этих определений. Формат файла JSON выглядит следующим образом:
Эти элементы организованы в интерфейсе с использованием подхода, аналогичного чтению XML-файлов в DUI. Если элемент является дочерним элементом, он будет искать соответствующий зарегистрированный класс в классе фабрики. Если класс зарегистрирован, будет создан новый объект этого класса. Указатель на этот объект будет добавлен в дерево интерфейса. Положение элемента в дереве интерфейса определяется zposition. 1. Класс T> DMRegHelperT
Класс T> [DMRegHelperT] используется для регистрации классов в фабрике классов. Его реализация является весьма искусной, поскольку он представляет реальные целевые объекты класса (например, класс EDJSonParser) с помощью целевого типа T. Сам класс имеет нулевой размер, и память выделяется только при создании реальных целевых объектов класса.
Для регистрации в классе фабрики классы должны наследоваться от класса EDBase и реализовывать три статические функции:
2. Модуль событий
Модуль событий REDM содержит множество хорошо написанных модулей, одним из которых является функция синхронизации вызовов Event в движке DUI. В классе управления событиями DMEventMgr используются наблюдатели для группировки всех зарегистрированных функций по EventID. При вызове функции происходит её рассылка на основе EventID. Эти функции вызова инкапсулированы в классах DMFreeFunctionSlot (для обычных неклассовых функций) и DMMemberFunctionSlot (для классовых функций), которые используют шаблон класса C++.
Классы DMMemberFunctionSlot используют шаблоны классов C++ для обработки регистрации неопределённых классов. Классовые функции регистрируются с использованием шаблона:
Обычные функции регистрируются следующим образом:
3. Анализ кода проекта
Наиболее сложной функцией в проекте является редактор специальных эффектов для изображений (DUIObjEditor). Этот класс включает в себя элементы DUIRoot (белый регион редактирования) и DUIDragFrame (элемент управления перетаскиванием). Все элементы изображения создаются в окне DUIRoot и могут быть перемещены в окно DUIDragFrame при перетаскивании элемента. Позиция элемента изображения изменяется с помощью DUIPos.
В библиотеке DUI необходимо переопределить класс Layout для рисования точек и повторно зарегистрировать его для замены стандартного класса макета DUI.
4. Обнаружение утечек памяти в Windows
Обнаружение утечек памяти в Windows часто осуществляется с помощью открытого исходного кода «vld». Принцип работы заключается в регистрации выделения и освобождения памяти программы через крючки. Когда происходит выделение памяти, это записывается, а при освобождении памяти соответствующая запись удаляется. Полученный список представляет собой все невысвобожденные блоки памяти. Затем можно отследить стек выделения, используя адрес Eip из записи.
Автор статьи извлёк и упаковал основной код vld в CMemLeak, чтобы упростить процесс мониторинга. Это было сделано из-за двух причин:
5. Компиляция и запуск проекта
Проект поддерживается с помощью CMake. Для его использования необходимо предварительно установить CMake. Проект поддерживает рендеринг с использованием Skia в качестве основы. Если эта функция необходима, следует выбрать соответствующие опции в процессе CMake.
При отладке проекта ресурсы DUI, включая XML и другие связанные файлы интерфейса, располагаются относительно каталога проекта в папке EDesigner\Res\EDesignerRes. Однако в режиме выпуска ресурсы в папках layout и themes в каталоге Res должны быть сжаты в файл EDesignerRes.zip и помещены в каталог Res. В режиме выпуска ресурсы DUI будут связаны с исполняемым файлом, что увеличивает размер файла, но защищает ресурсы от несанкционированного доступа и возможных ошибок при обновлении или изменении пользователем.
6. Открытые лицензии
Effect-Designer должен соответствовать определённым открытым лицензиям. Использование библиотеки разрешено для личных, групповых и корпоративных целей.
7. Дополнительная информация
Предоставлены контактные данные автора и ссылки на исходный код проекта, а также на исполняемый файл.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )