Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод теста на форму, Что ж так медленно этот Canvas.TextOut 
:(
    Опции темы
saff
Дата 29.1.2006, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 29.1.2006

Репутация: нет
Всего: нет



Значит так, имеется что-то похожее на консольное окно:

Код

type
  TScreenInfo = array [1..SCR_WID,1..SCR_HGT] of record
    Smb : char; // Символ
    Txt : TColor;  // Цвет символа
    Bck : TColor;  // Цвет фона
  end; 

var
  Scr: TScreenInfo;


Вывод на форму производится следующим образом:
Код

// SYMB_W - ширина символа в пикселях
// SYMB_H - высота символа в пикселях
procedure DrawScreen;
var
  I,J : byte;
begin
  for J := 1 to SCR_HGT do
    for I := 1 to SCR_WID do begin
      MyForm.Canvas.Font.Color  := Scr[I,J].Txt;
      MyForm.Canvas.Brush.Color  := Scr[I,J].Bck;
      MyForm.Canvas.TextOut((I-1)*SYMB_W,(J-1)*SYMB_H,Scr[I,J].Smb);
    end;
end; 

Эта процедура при SCR_WID = 80 и SCR_HGT = 25 выполняется за 20мс. А вот если расширить экран до 200*100 символов, то время поднимается до 110 мс. Т.е. всего 10fps. Как же так, почему так медленно??? Есть способ побыстрее?
PM MAIL   Вверх
Snowy
Дата 29.1.2006, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



Да.
1. Выводить не по одному символу, а строками.
2. Выводить на нефидимый битмап, а потом его целиком отрисовывать на канвас.
PM MAIL   Вверх
saff
Дата 29.1.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 29.1.2006

Репутация: нет
Всего: нет



1. А как? У меня каждый символ может иметь свой цвет и фон.
2. Попробовал, получилось чуть быстрее. 70-80 мс. Но для полного счастья нужно не менее 20мс.
PM MAIL   Вверх
Snowy
Дата 29.1.2006, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



Цитата(saff @ 29.1.2006, 15:50 Найти цитируемый пост)

Но для полного счастья нужно не менее 20мс.

Тогда, вероятно, стоит смотреть в сторону GDI+.
GDI не плюс штука медленная...
Простой GDI можно попробовать ускорить путем создания битмапов, вместо TextOut.
То есть заготавливаешь на каждую букву отдельный битмап и рисуешь ими, а не текстом.
Но здесь проблема с разным цветом.
Если и это не поможет, то смотри в сторону GDI+ - он гораздо быстрее.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0496 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.