Примечание. Поскольку я использую SkiaSharp, я буду публиковать код на C #; однако я подозреваю, что концептуально это применимо к Skia в любом языке / среде.
Резюме
Я рендеринг объекта Skia на холст заданного размера. Я бы хотел, чтобы размер холста был таким, чтобы он содержал визуализированный объект и его тень. Как определить дополнительный отступ, необходимый для теней при задании sigmaX
и sigmaY
Пример кода
Я рисую прямоугольник со скругленными углами на холсте, используя следующий код:
var paint = SKPaint
{
Color = SKColors.Red,
Style = SKPaintStyle.Fill
};
float sigmaX = 5;
float sigmaY = 5;
paint.ImageFilter = SKImageFilter.CreateDropShadow(
0,
0,
sigmaX,
sigmaY,
SKColors.Black,
SKDropShadowImageFilterShadowMode.DrawShadowAndForeground);
surface.Canvas.DrawRoundRect(
sigmaX,
sigmaY,
Width - sigmaX * 2,
Height - sigmaY * 2,
5, 5, // corner radius
paint);
В этом коде у меня есть холст, равный ширине и высоте, но я добавляю отступы sigmaX и sigmaY, потому что я предполагал, что это даст достаточно места для тени.
Однако , это не обеспечивает достаточно места для тени, как показано на следующем снимке экрана (увеличено, чтобы показать четкие границы):
![enter image description here](https://i.stack.imgur.com/qIDXY.png)
Если я хочу, чтобы холст содержал дропшоу. Мне нужно увеличить отступ для дропшоу примерно в 3 раза по сравнению со значением сигмы:
...
surface.Canvas.DrawRoundRect(
sigmaX * 3,
sigmaY * 3,
Width - (sigmaX * 2 * 3),
Height - (sigmaY * 2 * 3),
5, 5, // corner radius
paint);
Кажется, что это место для дропшоу, как показано на следующем снимке экрана:
![enter image description here](https://i.stack.imgur.com/WpQCO.png)
Вопросы
Что означает сигма, и что мой отступ должен быть задан сигмой? Относится ли сигма к стандартному отклонению, поэтому 3 будет эффективно захватывать 99% тени, а 3 стандартных отклонения - 99% выборок при нормальном распределении? Или есть какая-то другая связь между шириной и размером, которую я пропускаю?