2012-03-20 2 views
0

Можно ли применить градиент для наложения текста?Рисовать градиентную метку

Прямо сейчас я беру на себя управление OnPaint и рисую строку текста, которую я хочу; однако это относится к конкретным. Я действительно хочу сделать так, чтобы сам ярлык применял градиентные цвета, которые я хочу. Поэтому, в свою очередь, каждый символ будет иметь градиент, указанный при изменении текста.

Так что вместо использования ForeColor я бы применил LinearGradientBrush. Я использую WinForms на данный момент.

EDIT 1

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

// Draw the formatted text string to the DrawingContext of the control. 
Font font = new Font("BankGothic Md BT", 48f, FontStyle.Bold); 
LinearGradientBrush brush = new LinearGradientBrush(label1.Location, new Point(label1.Width, label1.Height), Color.Goldenrod, Color.Black); 
e.Graphics.DrawString(label1.Text, font, brush, 0,0); 

Edit 2

Вот что я сделал. Я просто расширил класс Label и унаследовал OnPaint.

public partial class LabelEx : Label { 
    public LabelEx() { 
     InitializeComponent(); 
    } 

    protected override void OnPaint(PaintEventArgs e) { 
     // Draw the formatted text string to the DrawingContext of the control. 
     //base.OnPaint(e); 
     Font font = new Font("Tahoma", 48f, FontStyle.Bold); 
     LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, Width, Height + 5), Color.Gold, Color.Black, LinearGradientMode.Vertical); 
     e.Graphics.DrawString(Text, font, brush, 0, 0); 

    } 
} 

Который дает мне хорошую градиентную текстовую метку.

Спасибо!

+1

Сверху моей головы попробуйте добавить текст в GraphicsPath и проложить путь с помощью кисти. –

+0

Если вы используете версию 4 фреймворка, объект 'FormattedText' может вам помочь: http://msdn.microsoft.com/en-us/library/ms752098.aspx – SeeSharp

+0

@SeeSharp это кажется очень специфичный для WPF. У меня нет метода OnRender в WinForms. – meanbunny

ответ

1

Вот что я сделал. Я просто расширил класс Label и унаследовал OnPaint.

public partial class LabelEx : Label { 

public LabelEx() { 
    InitializeComponent(); 
} 

protected override void OnPaint(PaintEventArgs e) { 
    // Draw the formatted text string to the DrawingContext of the control. 
    //base.OnPaint(e); 
    Font font = new Font("Tahoma", 48f, FontStyle.Bold); 
    LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, Width, Height + 5), Color.Gold, Color.Black, LinearGradientMode.Vertical); 
    e.Graphics.DrawString(Text, font, brush, 0, 0); 

} 

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