Нарисуйте изображение с закругленными углами, границей и градиентной заливкой в ​​C # - PullRequest
1 голос
/ 01 декабря 2010

Я искал повсюду, все погуглил и ничего хорошего не нашел.Что мне нужно, так это класс, способный рисовать изображение (графику) со скругленными углами (по-разному на каждом углу это плюс) с заполнением границ и градиентов.

Все примеры, которые я нахожу, имеют некоторые недостатки (например, плохое качество, отсутствующая функциональность и т. Д.).

Я буду использовать это с пеплом, который нарисует изображение, а затем покажет его пользователю.

Спасибо!

Ответы [ 2 ]

9 голосов
/ 01 декабря 2010

GraphicsPath позволяет рисовать относительно свободные формы, которые затем можно заполнить градиентной кистью. Приведенный ниже пример кода создаст прямоугольник с двумя различными закругленными углами и градиентной заливкой.

    GraphicsPath gp = new GraphicsPath();
    gp.AddLine(new Point(10, 10), new Point(75, 10));
    gp.AddArc(50, 10, 50, 50, 270, 90);
    gp.AddLine(new Point(100, 35), new Point(100, 100));
    gp.AddArc(80, 90, 20, 20, 0, 90);
    gp.AddLine(new Point(90, 110), new Point(10, 110));
    gp.AddLine(new Point(10, 110), new Point(10, 10));
    Bitmap bm = new Bitmap(110, 120);
    LinearGradientBrush brush = new LinearGradientBrush(new Point(0, 0), new Point(100, 110), Color.Red, Color.Yellow);
    using (Graphics g = Graphics.FromImage(bm))
    {
        g.FillPath(brush, gp);
        g.DrawPath(new Pen(Color.Black, 1), gp);
        g.Save();
    }
    bm.Save(@"c:\bitmap.bmp");

Этот результат на следующем изображении:

alt text

0 голосов
/ 01 декабря 2010

Я думаю, вам нужно создать свой собственный метод, используя графический объект и «вручную» (читай «с кодом») создать изображение.Проще всего было бы создать отдельный графический объект, добавить кружок, затем в каждый квадрант изображения добавить нужные элементы, а затем разбить объект на четверти.Или вернуть все как одно изображение, а затем использовать CSS-спрайты, чтобы поместить изображение в правильные места с правильными координатами (возможно, это лучшее решение, поскольку оно использует меньше обращений к графической библиотеке и возвращает только один файл, поэтому меньше обращений в Интернетсервер).

...