Нарисуйте тень на линии с помощью 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--){}