Весь функционал. кроме AutoOrient, работает через строки Base64, передаваемые в компоненту и возвращаемые из нее.
Реализованы методы:
Rotate (Поворот на определенный градус)
Flip (Отражение по вертикали)
Flop (Отражение по горизонтали)
Enhance (Уменьшение шума)
Sharpen (Увеличение четкости)
Oil (Имитация картины маслом)
И метод AutoOrient, которая работает не через строку Base64, а просто принимает на вход путь к картинке и перезаписывает нормализованное фото.
Подробнее о методах можно почитать в документации Image Magick С++.
Русскоязычные наименования методов постарался сделать максимально идентичными английским, буквально дословными. Описание методов и принимаемые на вход типы данных:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Где:
// ПутьККартинке - путь к картинке на жестком диске
//
// В результате старая картинка будет затерта и поверх записана новая
ПутьККартинке = "E:\cat.jpg";
Компонента.АвтоОриент(ПутьККартинке);
// Где:
// ДвоичныеДанные - Двоичные данные картинки
// ГрадусПоворота - градус на который необходимо повернуть изображение
// ОбработаннаяКартинка - двоичные данные в формате Base64
//
// В данном случае рекоммендуется вводить кратные 90 углы, в связи с тем, что при повороте
// на углы не кратные 90 размер картинки увеличивается и появляются пустые поля вокруг нее
// (данный вопрос пока не решил)
КартинкаВBase64 = Base64Строка(ДвоичныеДанные);
ГрадусПоворота = 90;
ОбработаннаяКартинка = Компонента.Повернуть(КартинкаВBase64, ГрадусПоворота);
// Все остальные операции идентичные друг другу.
// Где:
// ДвоичныеДанные - двоичные данные картинки,
// ОбработаннаяКартинка - двоичные данные в формате Base64
КартинкаВBase64 = Base64Строка(ДвоичныеДанные);
ОбработаннаяКартинка = Компонента.ОтразитьПоВертикали(КартинкаВBase64);
КартинкаВBase64 = Base64Строка(ДвоичныеДанные);
ОбработаннаяКартинка = Компонента.ОтразитьПоГоризонтали(КартинкаВBase64);
КартинкаВBase64 = Base64Строка(ДвоичныеДанные);
ОбработаннаяКартинка = Компонента.Улучшить(КартинкаВBase64);
КартинкаВBase64 = Base64Строка(ДвоичныеДанные);
ОбработаннаяКартинка = Компонента.Заострить(КартинкаВBase64);
КартинкаВBase64 = Base64Строка(ДвоичныеДанные);
ОбработаннаяКартинка = Компонента.Масло(КартинкаВBase64);
// На всякий пожарный, раскодируем картинку обратно в двоичные данные следующим образом:
КартинкаВДвоичныхДанных = Base64Значение(ОбработаннаяКартинка);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Исходники: https://github.com/popeless/addin-image-magick
То что написано в ReadMe на гитхабе:
- (c) Popeless
- Добавлены библиотеки Image Magick и несколько методов
- Лишние методы удалены
- Библиотеки в команде pragma comments при сборке должны быть в папке, где собирается библиотека SampleAddIn.lib
- Библиотеки и хедеры взяты из установщика Image Magick для Windows
- Эту библиотеку необходимо компилировать в Release режиме
- Спасибо Infactum за шаблон!
В файлах немного описал, как быстрее скомпилировать свои библиотеки. Компиляция под платформы не являющиеся Windows - не рассматривал.
На эту компоненту вдохновило видео канала "Веселый 1С"
Половину работы сделал за меня шаблон, предоставленный одним из участников сообщества, за что ему большая благодарность. Ссылка на шаблон и собственно гит.
P.S. Если вы найдете методы, которые было бы интересно реализовать, или вы предложите мне альтернативу моему коду, для улучшения реализации функционала - прошу вас не стесняться и писать мне в личные сообщения, либо в комментарии.