Страница: 1 |
Вопрос: Работа с графикой. Пожалуйста, помогите! | Добавлено: 24.06.04 15:35 |
Автор вопроса: ![]() |
Начал создавать новый проэкт, даже уже создал, а в
нём очень серьёзная проблема: дело в том, что мне необходимо рисовать на форме точками, например траву. И необходимо зарисовать так примерно пол-формы. Но получается ужасно медленно рисованием, используя стандартные методы для работы с графикой. Как осуществить другой, более динамичный вариант? Или скажите, как хотя бы просто на форме нарисовать обычный 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 Автор ответа: ![]() ![]() ![]() 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 Автор ответа: ![]() ![]() ![]() 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 Автор ответа: ![]() ![]() ![]() 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 Автор ответа: ![]() ![]() ![]() 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 Автор ответа: ![]() ![]() ICQ: 9481061 Вопросов: 18 Ответов: 132 |
Профиль | Цитата | #10 | Добавлено: 25.06.04 00:18 |
Графикой на Нете никогда не занимался, но если мыслить логически, то можно сделать следующие выводы, исходя из того, что тебе нужно нарисовать точку:
- DrawRectangle будет работать быстрее чем FillRectangle, т.к. ничего закрашивать не надо - DrawLine отработает еще быстрее - ну и еще быстрее, видимо, будет, если рисовать точку. Если такой метод конечно найдется. |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ICQ: 225442067 Вопросов: 20 Ответов: 170 |
Профиль | Цитата | #11 | Добавлено: 25.06.04 17:57 |
В том то и дело, что я тоже так думал, но Drawrectangle у меня со стороной в 1 пиксел совешенно невидим, а точку я не нашел как нарисовать... |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ICQ: 225442067 Вопросов: 20 Ответов: 170 |
Профиль | Цитата | #12 | Добавлено: 25.06.04 18:02 |
В любом случае всем спасибо! |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #13 | Добавлено: 25.06.04 19:50 |
Точку можно нарисовать только у класса BitMap, кажется, метод SetPixel. Увы, он его не "рисует", а только "ставит", что плохо, когда рисуешь полупрозрачными кистями... |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 165728420 Вопросов: 1 Ответов: 96 |
Профиль | Цитата | #14 | Добавлено: 30.06.04 07:20 |
Все таки ГДИ+ предпочтительнее долбаных ГДИАПИ.
Я уже игру на первом накалбасил (Змейка обычная). Если через двойной буфер рисовать - то нормально будет, хотя скорости заоблачной не ждите. Тут тогда лучше ОПЕНГЛ. |
Страница: 1 |
|