srilekhamenon Ответов: 1

Нарисуйте тень на линии с помощью C#


Я хочу добавить тень на линию в другом углу линии
Верхний левый,
TopCenter,
Результаты сравнения,
MiddleLeft,
MiddleCenter,
MiddleRight,
Днище,
BottomCenter,
Нижнем

Как я могу это сделать ?

Что я уже пробовал:

GraphicsPath path = new GraphicsPath();
            path.AddLine(10, 200, 200, 200);
            using (Graphics G = this.CreateGraphics())
            {
                var myPen = new Pen(Color.SkyBlue, 50);
                G.DrawLine(myPen, new Point(10, 200), new Point(200, 200));
                drawShadow(G, Color.Green, path, 25);
                
            }

void drawShadow(Graphics G, Color c, GraphicsPath GP, int d)
        {
            Color[] colors = getColorVector(c, this.BackColor, d).ToArray();
            for (int i = 0; i < d; i++)
            {
                G.TranslateTransform(0, 1);                // <== shadow vector!
                
                using (Pen pen = new Pen(colors[i], 1.75f))  // <== pen width (*)
                    G.DrawPath(pen, GP);
            }
            G.ResetTransform();

            
        }

        List<Color> getColorVector(Color fc, Color bc, int depth)
        {
            List<Color> cv = new List<Color>();
            float dRed = 1f * (bc.R - fc.R) / depth;
            float dGreen = 1f * (bc.G - fc.G) / depth;
            float dBlue = 1f * (bc.B - fc.B) / depth;
            for (int d = 1; d <= depth; d++)
                cv.Add(Color.FromArgb(255, (int)(fc.R + dRed * d),
                  (int)(fc.G + dGreen * d), (int)(fc.B + dBlue * d)));
            return cv;
        }

Richard MacCutchan

В чем вопрос?

srilekhamenon

Что создать тень в соответствии с аргументом для линии

Ramza360

Насколько большую тень вы здесь создаете, если выполняете TranslateTransform(0, 1)в цикле for? Если вам нужна одна тень, просто получите цвет тени и нарисуйте текст со смещением, прежде чем рисовать основной текст

Смещение может быть (x + 1, y + 1) для нижнего правого, (x-1, y + 1) для нижнего левого или (x + i, y + i), Если вы делаете это много раз, хотя вам нужно будет переключить цикл на for (int i = d; i > -1; i--){}