![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MoveTo, Pen.Color ;и LineTo слишком медленные, надо быстрее [D6, Win95/98]
D_V_I © (2002-11-28 13:15:00)Пожалуйста помогите!! У меня очень большой цикл вывода на Image.Canvas лайнов и мовов, и каждый раз меняется Pen.Color - это занимает дикое количество времени(7 секунд, а то и 20), может можно как-то через память(поточечно, побыстрее)? Подскажите как? Заранее благодарен.
Бурундук (2002-11-28 14:33:00) [1]Сначала всё-таки последуй совету тов. Слесаря Матерящегося (28.11.02 13:43)
и создай все нужные перья заранее.
(Pen.Assign работает гораздобыстрее, чем изменение св-в пера):
const
penRed = 0;
...
for i := 0 to
PreviouslyCreatedPens[i] := TPen.Create;
PreviouslyCreatedPens[penRed].Color := clRed;
...
А при рисовании не Pen.Color := clRed, а
Pen.Assign(PreviouslyCreatedPens[penRed]);
Может оказаться, что этого будет вполне достаточно.
HanIP (2002-11-28 13:52:00) [2]рисуй через WinApi очень быстро получается
Игорь Шевченко (2002-11-28 13:52:00) [3]Пример в controls.pas
procedure TWinControl.WMPaint(var Message: TWMPaint);
d_v_i (2002-11-28 13:51:00) [4]на каждом шаге цикла надо менять Pen.Color - дико медленно
Слесарь Матерящийся (2002-11-28 13:43:00) [5]>Pen.Color
А что мешает готовить пёрышки и кисти заранее?
D_V_I (2002-11-28 13:41:00) [6]Будте добры, поисните работу с BitBlt
Игорь Шевченко (2002-11-28 13:39:00) [7]Можно а) через Bitmap в памяти и последующим BitBlt
б) через DC Pen
Starkom (2002-11-28 13:18:00) [8]может прямо Canvas.Pixels[x,y].color:=нужный. Хотя, по идее, это еще медленее работать должно. Я как-то таким образом треугольник заливал в 1-х дельфях, работало жутко медленно.