Как определить количество места, необходимого для отбрасывания теней Skia? - PullRequest
1 голос
/ 28 февраля 2020

Примечание. Поскольку я использую 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

Если я хочу, чтобы холст содержал дропшоу. Мне нужно увеличить отступ для дропшоу примерно в 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

Вопросы

Что означает сигма, и что мой отступ должен быть задан сигмой? Относится ли сигма к стандартному отклонению, поэтому 3 будет эффективно захватывать 99% тени, а 3 стандартных отклонения - 99% выборок при нормальном распределении? Или есть какая-то другая связь между шириной и размером, которую я пропускаю?

...