#math #graphics #geometry #gaussian #gaussianblur
#математика #графика #геометрия #гауссовский #gaussianblur
Вопрос:
Я сглаживаю вектор из инструмента проектирования (эскиза) в PNG. Вектор может иметь тень:
В этом случае X и Y перед выравниванием равны 100×100, а ширина и высота перед выравниванием тоже равны 100×100.
По соображениям автоматизации я автоматически выполняю выравнивание этого вектора в формате PNG в фоновом режиме (это CLI, работающий на сервере). Затем инструмент выдает мне новую ширину и высоту PNG, но, в отличие от изображения ниже, новые или дельта X и Y неизвестны:
Как вы можете видеть выше, иногда эти векторы имеют тени, из-за которых рамка изображения будет больше при сглаживании, так что тень включается в экспортируемое изображение. Однако это также означает, что X и Y нового кадра должны быть скорректированы таким образом, чтобы отображаемая часть нового кадра все еще находилась в исходном положении.
Вот почему новые X и Y равны 29×44 (с шириной и высотой 233×244).
Вопрос в том, как вычислить новые или дельта X и Y на основе свойств исходного вектора (вкл. теневые реквизиты x, y, размытие, распространение) и / или ширина / высота нового сглаженного изображения (которые известны).
Краткие сведения
Мне нужно вычислить дельта X и Y таким образом, чтобы положение отображаемого изображения было таким же, как до изменения размера его кадра, чтобы включить тень в ее сглаженную форму.
Возьмите этот тестовый пример:
Перед выравниванием
frame x = 100
frame y = 100
frame width = 100
frame height = 100
shadow x = 0
shadow y = 20
shadow blur = 80
shadow spread = 0
после выравнивания:
frame x = 29 (*)
frame y = 44 (*)
frame width = 233
frame height = 244
У меня есть все вышеуказанные значения, КРОМЕ фреймов после сглаживания x и y (помеченных *). Как мне разработать формулу, которая вычисляет эту дельту X, Y из свойств фрейма и тени вектора и / или ширины / высоты нового фрейма PNG?
Комментарии:
1. Это полностью зависит от спецификаций приложения, которое рисует тень. Но я бы предположил, что смещение линейно по размытию и распространению (с разными коэффициентами, вероятно, около 3 и 1). Попробуйте несколько примеров и посмотрите, видите ли вы какую-либо связь. На самом деле ничего нельзя сделать издалека, ничего не зная о программе.