2009-05-11 5 views
11

Я googled для «Рисование текста на картинке C#», но я не смог найти что-нибудь полезное. Тогда я искал Google для рисования текста на форме C# и нашел код, но он не работает так, как я хочу, чтобы он работал.Как нарисовать текст на картинке?

private void DrawText() 
    { 
     Graphics grf = this.CreateGraphics(); 
     try 
     { 
      grf.Clear(Color.White); 
      using (Font myFont = new Font("Arial", 14)) 
      { 
       grf.DrawString("Hello .NET Guide!", myFont, Brushes.Green, new PointF(2, 2)); 
      } 
     } 
     finally 
     { 
      grf.Dispose(); 
     } 
    } 

Когда я вызываю функцию, цвет фона формы становится белым (по умолчанию он черный).

Мои вопросы:

1: Будет ли это работать на PictureBox?

2: Как исправить проблему?

+0

Вы можете просто создать объект Label, написать на нем и установить его в любую нужную координату. – BobbyShaftoe

+1

Цвет фона ярлыка не будет таким же, как и изображение, на которое я хочу написать текст. –

ответ

34

Вы не хотите, чтобы звонок Clear() - вот почему он превращает белый фон, и он скроет ваше изображение.

Вы хотите использовать событие Paint в PictureBox. Вы получаете графическую ссылку от e.Graphics, а затем используете DrawString(), который у вас есть в вашем примере.

Вот образец. Просто добавьте коробку изображения в форму, и добавить обработчик событий для события Paint:

private void pictureBox1_Paint(object sender, PaintEventArgs e) 
{ 
    using (Font myFont = new Font("Arial", 14)) 
    { 
     e.Graphics.DrawString("Hello .NET Guide!", myFont, Brushes.Green, new Point(2, 2)); 
    } 
} 

(Обратите внимание, что вы не увидите текст во время разработки - вам придется запустить программу для него рисовать).

+0

Я не понимаю, как исправить проблему. –

+0

Дайте мне несколько минут, и я отправлю пример кода ... –

+1

+1; @John: просто не вызывайте Dispose объекта e.Graphics в событии Paint; вы только «заимствуете» его. –

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