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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод bmp, скорость 
:(
    Опции темы
BreakMeThunder
Дата 31.12.2006, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Скажите что нужно использовать чтобы достич быстрого отображения бмпэшек? Я рисую на битмапе и передаю его паинтбоксу, но все-равно скорость отрисовки не достаточная! Что же делать? Если можно поподробнее.
PM MAIL WWW ICQ   Вверх
VICTAR
Дата 31.12.2006, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А почему бы сразу не рисовать на PaintBox?
PM MAIL   Вверх
BreakMeThunder
Дата 31.12.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



я делал так специально, это еще вроде называется двойная буфферизация, чтобы не был виден процесс отрисовки.
PM MAIL WWW ICQ   Вверх
VICTAR
Дата 31.12.2006, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Если тебе нужна двойная буфферизация, то сделай как написано в топике ниже (положи PaintBox на Panel или что-нибудь подобное и присвой DoubleBuffered:=true).
PM MAIL   Вверх
BreakMeThunder
Дата 31.12.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



сделал все так... но все-равно как то медленно отрисовывается... я несколько поясню задачу - дело в том что я делаю тайловую рпг, где при передвижении игрока происходит постоянный скролл. Размер одного тайла 30х30, размер видимой карты 19х19. Может еще что-нибудь посоветуете? 
PM MAIL WWW ICQ   Вверх
VICTAR
Дата 31.12.2006, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Как мне кажется, стоит взглянуть на процедуру перерисовки...
PM MAIL   Вверх
BreakMeThunder
Дата 31.12.2006, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

{Вывести тайл}
procedure TMap.DrawTile(x,y : byte; a,b : integer; var c : TBitMap);
begin
  if (a>0)and(a<=MapX)and(b>0)and(b<=MapY) then
  begin
    {Тайл}
    c.Canvas.Draw((x-1)*TileX,(y-1)*TileY,TerGraf[M.tile[a,b][1]]);
    if M.tile[a,b][2] > 0 then
      c.Canvas.Draw((x-1)*TileX,(y-1)*TileY,TerGraf[M.tile[a,b][2]]);
    {Герой}
    c.Canvas.Draw(ScreenSide*TileX,ScreenSide*TileY,pc.Image);
  end else
    {Вывести черный квадрат}
    c.Canvas.Rectangle((x-1)*TileX,(y-1)*TileY,(x-1)*TileX+TileX,(y-1)*TileY+TileY);
end;

{Вывести окружающие тайлы}
procedure TMap.DrawSquare;
var
  x,y : byte;
  c : TBitMap;
begin
  {Создаем битмэп}
  c := TBitmap.Create;
  c.Canvas.Brush.Color := 0;
  c.Width := ScreenX*TileX;
  c.Height := ScreenY*TileY;
  {Выводим тайлы}
  for y:=1 to ScreenY do
    for x:=1 to ScreenX do
      DrawTile(x,y,pc.x-ScreenSide+x,pc.y-ScreenSide+y,c);
  {Передаем картинку}
  MainForm.MapScreen.Canvas.StretchDraw(MainForm.MapScreen.ClientRect,c);
  {Освобождаем память}
  c.Free;
end;


PM MAIL WWW ICQ   Вверх
Alexeis
Дата 31.12.2006, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



BreakMeThunder, А вообще сам битмап умещается в памяти или нет. Какого размера картинка?
Возможно рисуется картинка превосходящая по размеру область экрана.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
BreakMeThunder
Дата 31.12.2006, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



битмап размера 570х570
PM MAIL WWW ICQ   Вверх
Nicholas_S
Дата 1.1.2007, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



BreakMeThunder, копирование изображения происходит быстро, вопрос в скорости построения изображения. Ты можешь в этом убедиться, засекая время по отдельности для отрисовки и для копирования картинки.
Для рисования, особенно для динамической смены изображений, использовать стандартный bitmap не есть оптимальный вариант. Для этого советую попробовать какой-нибудь сторонний компонент с высокой скоростью отрисовки. Например, очень хорошим является компонент TFastDIB, которым пользуюсь уже вот несколько лет и не нарадуюсь. Комопонент распространяется под GPL лицензией и ты можешь его найти в сети. Среди возможностей такие как: быстрое обращение к любому пикселю канвы, алгоритмы вывода примитивов, сглаженных линий, конвертирование глубины цвета, масштаирование и проч. В поставке идут неплохие примеры, так что разобраться не составит труда.


--------------------
...все в мире относительно
PM   Вверх
Alexeis
Дата 1.1.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Nicholas_S, я читал одну статью про делфийские компоненты для поддержки битмапов. Сравнивались 6 популярных библиотек, в том числе и стандартный TBitmap. Так вот он оказался по середине при этом отрыв по отношению к его соседям был небольшой, не больше 30%. Так что он нет так уж плох по скорости. Скорее всего тормозит не сама отрисовка учитывая, что размер картинки весьма невелик. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Nicholas_S
Дата 1.1.2007, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Alexeis, конечно, стандартный bitmap не так уж и плох, однако сам понимаешь, использование для попиксельной работы с канвой вызывает иногда мандраж - скорости не хвататет (если посмотреть вглубь кода при получении/устновке цвета пикселя TCanvas, то сразу становится понятно, куда пропадает скорость).
Для рисование стандартных примитивов аля квадрат/круг TBitmap более чем достаточно, безусловно. Просто думаю если автору поста будет интересно, посмотрит.
TFastDIB мне чем понравился - это компонент по из разряда "вес продумано", наровне с TVirtualTree: грамотно, просто и доступно.
В данном примере скорость отрисовки тормозит, конечно.


--------------------
...все в мире относительно
PM   Вверх
Alexeis
Дата 1.1.2007, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Nicholas_S @  1.1.2007,  21:58 Найти цитируемый пост)
использование для попиксельной работы с канвой вызывает иногда мандраж - скорости не хвататет (если посмотреть вглубь кода при получении/устновке цвета пикселя TCanvas, то сразу становится понятно, куда пропадает скорость).

Кто же требует использования Pixels ? для таких вещей придумали быстрый ScanLine, который отлично справляется с задачей попиксельного вывода. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Nicholas_S
Дата 2.1.2007, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Alexeis, лично я не люблю сканлайн изначально, неудобная штука. Насчет простых примитивов я сказал выше  smile 


--------------------
...все в мире относительно
PM   Вверх
Alexeis
Дата 2.1.2007, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Nicholas_S, Чего его не любить? Это же прямой адрес карты в памяти. Какая разница как он получен? Если не нравится можно его самому переписать (в соседней теме я написал свой ScanLine). Что же может быть быстрее прямой записи в память? Только операции в видеокарте.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

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


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

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


 




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


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

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