Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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)

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 23.11.06 23:30
странно.. на первый взгляд все верно..
А что за ошибку выдает?

Ответить

Номер ответа: 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-ах)

Ответить

Номер ответа: 3
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #3 Добавлено: 24.11.06 20:02
странно все это.. (( Мне кажется возможным тот факт, что либо в винде нехватает каких-то GDI-библиотек которые нужны CFW , либо на самом деле какой то глюк в CFW..

Ответить

Номер ответа: 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?

Ответить

Номер ответа: 5
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #5 Добавлено: 25.11.06 21:36
как все-таки рисовать в PictureBox?
фичи .AutoRedraw уже нету, поэтому нада либо перерисовывать картинку в событии Paint(), либо рисовать на Bitmap'е, а потом PictureBox1.Image = myBitmap. Наскока я помню, картинка перерисовываться будет автоматически. Если что, EROS меня поправит :)

Ответить

Номер ответа: 6
Автор ответа:
 Glyckmen



Вопросов: 7
Ответов: 22
 Профиль | | #6 Добавлено: 30.11.06 11:35
Sacred Phoenix Идея хорошая но не получается, Studia сразу выдает ошибку о том что классы Image и Graphics не совместимы (В Image можно рисовать только точками что мне не совсем подходит, PictureBox не хочет работать с Graphics, Форма не перерисовывается) какие еще будут предложения?
PS: Напомню что я хочу написать программу для СМАРТФОНА и использую NET.Framework Compact 1.0

Ответить

Номер ответа: 7
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #7 Добавлено: 30.11.06 18:26
классы Image и Graphics не совместимы

Что значит не совместимы? И каким же образом ты их пытаешься совместить?
В Image можно рисовать только точками что мне не совсем подходит

И кто это сказал?

Ответить

Номер ответа: 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, но думаю что проблем быть не должно...

Ответить

Номер ответа: 10
Автор ответа:
 Glyckmen



Вопросов: 7
Ответов: 22
 Профиль | | #10 Добавлено: 03.12.06 01:14

EROS Спасибо огромное! Просветил, теперь я думаю проблем будет меньше. :)
Теперь все понятно что это за Graphics.
Но у меня получился только первый вариант. Ну да ладно. У меня вопрос чисто познавательного характера, в каких случаях наступает событие Paint объекта (кнопки, формы, и т.п)?

Ответить

Номер ответа: 11
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #11 Добавлено: 03.12.06 14:41
в каких случаях наступает событие Paint объекта


Цитата:
Оно возникает всякий раз, когда область, в которой происходило рисование, повреждена. Причины этого могут быть разные - пользователь свернул форму, изменил ее размеры, произошло перекрытие другой формой, был вызван метод Invalidate или Refresh - во всех этих случаях требуется перерисовать область. Тогда-то и возникает событие Paint, в задачу его обработчика входит перерисовка поврежденной области. Первый раз событие Paint возникает при открытии формы.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам