Страница: 1 |
Страница: 1 |
Вопрос: Вывод текста в PictureBox
Добавлено: 24.10.06 23:05
Автор вопроса: Сергей Юдин
Никак не получается вывести текст в рисунок, т.к. никак не могу правильно задать шрифт. Что здесь не правильно
Dim GG As Graphics
Dim SysFont As New System.Drawing.Font("ARIAL", 10)
GG = Picture1.CreateGraphics()
GG.DrawString("Info", SysFont, Pens.Red, 3, 5)
GG.DrawString("Info", Font("ARIAL", 10), Pens.Red, 3, 5)
Кстати графика работает и рисует квадрат, т.е. точку
GG.FillRectangle(Brushes.Black, XG, YG, 1, 1)
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #1
Добавлено: 25.10.06 01:38
''' Ошибка в том, что вызывать метод <c>Graphics.DrawString</c> необходимо
''' в событии <c>Paint</c> того объекта, на котором рисуешь!
''' </summary>
''' <remarks>
''' В противном случае изображение тут же будет перерисовано
''' полностью или частично при любом обновлении экрана
''' </remarks>
Private Sub PictureBox1_Paint(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) _
Handles PictureBox1.Paint
e.Graphics.DrawString("GDI+ Test VS 2005", _
New Font("Arial", 12, FontStyle.Italic Or FontStyle.Bold), _
Brushes.Red, 2, 2)
End Sub
Номер ответа: 2
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #2
Добавлено: 25.10.06 02:04
Если же необходимо это сделать в каком - либо другом событии, то как правило поступают следующим образом:
- Создается объект Bitmap из картинки, которая находится в PictureBox, либо из файла
- Рисуешь,пишешь,чертишь там что душе угодно
- Потом загоняешь всю эту эту прелесть в Image своего PictureBox'а...
При таком подходе твоя картинка будет статична и никакие обновления экрана ее не сотрут и не изменят..
Номер ответа: 3
Автор ответа:
Сергей Юдин
Вопросов: 8
Ответов: 81
Профиль | | #3
Добавлено: 28.10.06 22:04
- Создается объект Bitmap из картинки, которая находится в PictureBox, либо из файла
- Рисуешь,пишешь,чертишь там что душе угодно
- Потом загоняешь всю эту эту прелесть в Image своего PictureBox'а...
'Спасибо за помощь. Переделал все с Bitmap, но остался вопрос.
'А зачем тогда метод Graphics.DrawString для PictureBox и как
'его вызывать в событии Paint, т.к. он у меня срабатывает сразу
'как я начинаю работать PictureBox, т.е. уже при загрузке формы.
'Dim bmp As Bitmap
'Dim gg As Graphics
'Dim Info As String
'Private Sub Form1_Load(ByVal eventSender As System.Object, _
'ByVal eventArgs As System.EventArgs) Handles MyBase.Load
'bmp = New Bitmap(Picture1.Width, Picture1.Height)
'gg = Graphics.FromImage(bmp)
'Info = "Закрыта программа SpuskSi"
'Picture1String(Info, 10, 40)
'End Sub
'Private Sub Picture1String(ByVal Inform As String, _
'ByVal Xs As Integer, ByVal Ys As Integer)
' gg.DrawString(Inform, New Font("Arial", 12, FontStyle.Italic _
'Or FontStyle.Bold), Brushes.Black, Xs, Ys)
' Picture1.Image = bmp
'End Sub
'С наилучшими пожеланиями Сергей Юдин
Номер ответа: 4
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #4
Добавлено: 28.10.06 22:36
Чтобы рисовать на картинке в PictureBox
смотри ответ №1
Номер ответа: 5
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #5
Добавлено: 28.10.06 23:11
Private infoString As String = ""
Private stringPosition As PointF
Private Sub PictureBox1_Paint(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) _
Handles PictureBox1.Paint
If Not String.IsNullOrEmpty(infoString) And _
Not stringPosition.IsEmpty Then
e.Graphics.DrawString(infoString, _
New Font("Arial", 12, FontStyle.Italic Or FontStyle.Bold), _
Brushes.Red, stringPosition)
End If
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles Me.MouseMove, PictureBox1.MouseMove
infoString = String.Format("Cursor position is X={0} Y={1}", _
e.X.ToString, _
e.Y.ToString)
stringPosition = New PointF(5, 5)
PictureBox1.Invalidate()
End Sub
End Class
Номер ответа: 6
Автор ответа:
Сергей Юдин
Вопросов: 8
Ответов: 81
Профиль | | #6
Добавлено: 01.11.06 23:22
Спасибо. Все работает. И метод Picture1_Paint действительно отличается от вывода текста в bitmap помещенного в PictureBox, т.к. в bitmap новые изображения накладываютя на старые и скоро в этом месте появляется просто темное пятно, а изображение выведенное с помощью Picture1_Paint постоянно обновляется не затрагивая моего изображения в bitmap.
С наилучшими пожеланиями Сергей Юдин.