Страница: 1 |
|
Вопрос: Назначение цвета при работе с графикой на VB.Net
|
Добавлено: 23.11.06 14:15
|
|
Автор вопроса: Glyckmen
|
Добрый день!
Имеется такой код:
Dim Pic As Graphics
Pic = PictureBox1.CreateGraphics
Dim st As System.Drawing.Pen
st = New Pen(Color.FromArgb(107, 137, 191))
Pic.DrawLine(st, 2 + xs, 26 + ys, 25 + xs, 26 + ys)
Этот код очень хорошо выполняется на большом компе, но точно такой-же код не хочет выполняться на Smartfon Windows Mobile SE 2003 при написании этого кода для мобильного устройства ошибка происходит именно во время выполнения программы на строчке:st = New Pen(Color.FromArgb(107, 137, 191)) при этом Studio при написании этой строки выдает все нужные подсказки, подскажите что тут не правильно? Может надо что-то объявить еще или подключить (вроде NET Framework 1.0 Compact подключен и там есть класс PEN структура Color и функция FromArgb)
Ответить
|
Номер ответа: 2 Автор ответа: Glyckmen
Вопросов: 7 Ответов: 22
|
Профиль | | #2
|
Добавлено: 24.11.06 13:06
|
Ошибка появляется только во время выполнения программы "NotSupportedException was unhandled"
на строчке: st = New Pen(Color.FromArgb(107, 137, 191)) код сделал по другому:Dim Pic As Graphics
Pic = PictureBox1.CreateGraphics
Dim st As System.Drawing.Pen
Dim col As Color = Color.Azure
'st = New Pen(Color.FromArgb(107, 137, 191))
st = New Pen(col)
Pic.DrawLine(st, 2 + xs, 26 + ys, 25 + xs, 26 + ys) и теперь та-же ошибка вылезает на строкеDim col As Color = Color.Azure
т.е. получается что ошибка с объявлением цвета или может быть это глючный .NET Framework 1.0 CE. Вот я и интересуюсь у всех такая ошибка или только у меня. (Хотя она появляется на двух разных компах и на всех Smartfon-ах)
Ответить
|
Номер ответа: 4 Автор ответа: Glyckmen
Вопросов: 7 Ответов: 22
|
Профиль | | #4
|
Добавлено: 25.11.06 18:04
|
Сделал такой код и все заработало:
Dim pic As Graphics = Me.CreateGraphics
pic.DrawImage(PictureBox1.Image, 0, 0)
Dim st As System.Drawing.Pen
st = New Pen(Color.FromArgb(107, 137, 191))
pic.DrawLine(st, 2 + xs, 26 + ys, 25 + xs, 26 + ys)
т.е. я из PictureBox1 переношу картинку на форму и на форме спокойно уже рисую (цвет объявляется нормально), но тут появлется другая проблема на смартфоне кода я вызвал меню и потом его закрыл остается белый квадрат от меню (изображение не обнавляется), на VB6 была настройка Autoredraw, а здесь есть что-то подобное(me.Refresh() - просто стирает все с формы), и как все-таки рисовать в PictureBox?
Ответить
|
Номер ответа: 8 Автор ответа: Glyckmen
Вопросов: 7 Ответов: 22
|
Профиль | | #8
|
Добавлено: 01.12.06 09:59
|
EROS
Прошу прощения. Но я немного глупость сморозил в предыдущем посте. Я хотел сказать немного другое:
По совету либо рисовать на Bitmap'е, а потом PictureBox1.Image = myBitmap я хотел сделал так, но у Bitmap'а всехо несколько свойств:
Dispose
GetPixel
Height
SetPixel
Size
Width
Вот и все свойсва Bitmap'a, рисовать по точкам (SetPixel) не приемлимо.
Попробовал сделать так:
Dim pic As Graphics = Graphics.FromImage(PictureBox1.Image)
Dim pen1 As Pen
pen1 = New Pen(Color.Aqua)
pic.DrawLine(pen1, 5, 5, 100, 100)
pic.Dispose()
PictureBox2.Image = pic
и на строчке PictureBox2.Image = pic Studia сразу выдает ошибку:Value of type 'System.Drawing.Graphics' cannot be converted to 'System.Drawing.Image'
Вот я и задюсь вопросом как мне на существующей картинке дорисовать свое и потом измененную картинку запихнуть в PictureBox? (Можно простейший пример, где исходная картинка находится в PictureBox1, нарисовать на исходной картинке линию и потом измененную картинку запихнуть в PictureBox2.)
Умоляю помогите, а то я уже запарился.
Ответить
|
Номер ответа: 9 Автор ответа: EROS
Вопросов: 58 Ответов: 4255
|
Профиль | | #9
|
Добавлено: 01.12.06 17:48
|
Вы, видимо, недопонимаете сути того, что пытаетесь сделать. Ппопробую объяснить вкратце..
Вы пытаетесь вместо изображения (Image,Bitmap) подсунуть в PictureBox2 объект Graphics, что само по себе является ошибкой! Graphics- это всего лишь предоставляет возможность рисовать практически на любом объекте, который поддерживает это свойство.. Это может быть кнопка, форма.. да все, что угодно, но сам по себе Graphics не является изображением, и соотвестственно вы не можете писать PictureBox2.Image = pic
как мне на существующей картинке дорисовать свое и потом измененную картинку запихнуть в PictureBox? (Можно простейший пример, где исходная картинка находится в PictureBox1
Решить Вашу проблему можно 2 способами, и оба способа описал Sacred Phoenix в 5-м посте.
Вариант1:
Используем событие Paint объекта PictureBox. Суть в том, что в эту процедуру передается параметр e As System.Windows.Forms.PaintEventArgs который УЖЕ содержит объект Graphics и создавать его допольнительно нет необходимости. Использовать его можно примерно так:
Private Sub PictureBox1_Paint(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
e.Graphics.DrawString("VBNET.RU", _
New Font("Tahoma", 10, FontStyle.Bold Or FontStyle.Italic), _
Brushes.Red, 5, 5)
End Sub
Вариант 2:
Суть заключается в создании клона из существующего изображения, либо загрузки изображения с диска, либо создание пустого Bitmap'a и рисования на нем. Использовать можно практически в любом событии. Делается это примерно так:
Private Sub Button1_Click( ByVal sender As System. Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'// Объект Bitmap можешь создать любым из известных тебе способов
'Dim MyPicture As New Bitmap(150, 150)
'Dim MyPicture As New Bitmap(PictureBox1.Image)
'Dim MyPicture As Bitmap=Bitmap.FromFile("C:\Мая картинка.jpg"
Dim MyPicture As Bitmap = PictureBox1.Image.Clone
'// Создаем объект Graphics
Dim graph As Graphics = Graphics.FromImage(MyPicture)
'// Рисуем, пишим, чертим и т.д.
graph.DrawString("VBNET.RU", _
New Font("Tahoma", 10, FontStyle.Bold Or FontStyle.Italic), _
Brushes.Red, 5, 5)
'// Показываем результат
PictureBox1.Image = MyPicture
'// Убиваем ненужный объект
graph.Dispose()
End Sub
Вот, собственно, и все...
P.S. К сожалению, не могу проверить работоспособность кода под CFW, но думаю что проблем быть не должно...
Ответить
|
Страница: 1 |
Поиск по форуму