Страница: 1 |
Страница: 1 |
Вопрос: Работа с графикой. Пожалуйста, помогите!
Добавлено: 24.06.04 15:35
Автор вопроса: K&M | ICQ: 225442067
Начал создавать новый проэкт, даже уже создал, а в
нём очень серьёзная проблема: дело в том, что мне необходимо рисовать на форме точками, например траву. И необходимо зарисовать так примерно пол-формы. Но получается ужасно медленно рисованием, используя стандартные методы для работы с графикой. Как осуществить другой, более динамичный вариант?
Или скажите, как хотя бы просто на форме нарисовать обычный BMP-файл? В VB6 этот метод назывался PaintPicture(). Заранее спасибо.
Ответы
Всего ответов: 14
Номер ответа: 1
Автор ответа:
Артём Л.
ICQ: 280044491
Вопросов: 43
Ответов: 227
Профиль | | #1
Добавлено: 24.06.04 16:10
если рисуешь на форме то в ее коструктор добавь:
SetStyle( ControlStyles.DoubleBuffer , true)
SetStyle( ControlStyles.UserPaint , true)
SetStyle( ControlStyles.AllPaintingInWmPaint , true)
должно немного помочь, по крайней мере разницу должен увидеть..
а как ты вообще рисушь?
Номер ответа: 2
Автор ответа:
K&M
ICQ: 225442067
Вопросов: 20
Ответов: 170
Профиль | | #2
Добавлено: 24.06.04 17:42
Извиняюся, за задержку...
У меня программа просто считывает данные из файла, а затем поочерёдно рисует точки:
For i = 0 to N
GBrush.color = ColN
Graph.Fillrectangle(GBrush, X, Y, 1, 1)
Next
Где:
Graph объект класса Graphics
GBrush - New SolidBrush
Считывая данные получаем координаты X, Y и цвет Col и.т.д.
Номер ответа: 3
Автор ответа:
Артём Л.
ICQ: 280044491
Вопросов: 43
Ответов: 227
Профиль | | #3
Добавлено: 24.06.04 17:59
ну а то что я посоветовал не помогло?
Номер ответа: 4
Автор ответа:
K&M
ICQ: 225442067
Вопросов: 20
Ответов: 170
Профиль | | #4
Добавлено: 24.06.04 18:08
А куда собственно нужно это писать? Я вставлял это в "Windows forms designer generated code", а оно пишет что-то типа функция не объявлена...
Номер ответа: 5
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #5
Добавлено: 24.06.04 18:13
Юзай обычный unmanaged GDI... Он намного шустрее работает.
Номер ответа: 6
Автор ответа:
K&M
ICQ: 225442067
Вопросов: 20
Ответов: 170
Профиль | | #6
Добавлено: 24.06.04 18:15
А это где искать?
Номер ответа: 7
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #7
Добавлено: 24.06.04 18:22
Это библиотека, содержащая функции API, предназначенные для
рисования... GDI+ - фактически лишь оболочка для GDI.
Ищи в MSDN "GDI (graphics device interface)".
Номер ответа: 8
Автор ответа:
K&M
ICQ: 225442067
Вопросов: 20
Ответов: 170
Профиль | | #8
Добавлено: 24.06.04 18:24
Спасибо, буду искать!
Номер ответа: 9
Автор ответа:
Артём Л.
ICQ: 280044491
Вопросов: 43
Ответов: 227
Профиль | | #9
Добавлено: 24.06.04 18:26
вот сюда:
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
SetStyle( ControlStyles.DoubleBuffer , true)
SetStyle( ControlStyles.UserPaint , true)
SetStyle( ControlStyles.AllPaintingInWmPaint , true)
End Sub
Номер ответа: 10
Автор ответа:
Alex3
ICQ: 9481061
Вопросов: 18
Ответов: 132
Профиль | | #10
Добавлено: 25.06.04 00:18
Графикой на Нете никогда не занимался, но если мыслить логически, то можно сделать следующие выводы, исходя из того, что тебе нужно нарисовать точку:
- DrawRectangle будет работать быстрее чем FillRectangle, т.к. ничего закрашивать не надо
- DrawLine отработает еще быстрее
- ну и еще быстрее, видимо, будет, если рисовать точку. Если такой метод конечно найдется.
Номер ответа: 11
Автор ответа:
K&M
ICQ: 225442067
Вопросов: 20
Ответов: 170
Профиль | | #11
Добавлено: 25.06.04 17:57
В том то и дело, что я тоже так думал, но Drawrectangle у меня со стороной в 1 пиксел совешенно невидим, а точку я не нашел как нарисовать...
Номер ответа: 12
Автор ответа:
K&M
ICQ: 225442067
Вопросов: 20
Ответов: 170
Профиль | | #12
Добавлено: 25.06.04 18:02
В любом случае всем спасибо!
Номер ответа: 13
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #13
Добавлено: 25.06.04 19:50
Точку можно нарисовать только у класса BitMap, кажется, метод
SetPixel.
Увы, он его не "рисует", а только "ставит", что плохо, когда рисуешь
полупрозрачными кистями...
Номер ответа: 14
Автор ответа:
ШевТ
ICQ: 165728420
Вопросов: 1
Ответов: 96
Профиль | | #14
Добавлено: 30.06.04 07:20
Все таки ГДИ+ предпочтительнее долбаных ГДИАПИ.
Я уже игру на первом накалбасил (Змейка обычная).
Если через двойной буфер рисовать - то нормально будет, хотя скорости заоблачной не ждите. Тут тогда лучше ОПЕНГЛ.