2010-12-01 3 views
1

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

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

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

Спасибо!

ответ

9

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

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

Смежные вопросы