| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > Вывод bmp |
| Автор: BreakMeThunder 31.12.2006, 15:41 |
| Скажите что нужно использовать чтобы достич быстрого отображения бмпэшек? Я рисую на битмапе и передаю его паинтбоксу, но все-равно скорость отрисовки не достаточная! Что же делать? Если можно поподробнее. |
| Автор: VICTAR 31.12.2006, 16:26 |
| А почему бы сразу не рисовать на PaintBox? |
| Автор: BreakMeThunder 31.12.2006, 16:35 |
| я делал так специально, это еще вроде называется двойная буфферизация, чтобы не был виден процесс отрисовки. |
| Автор: VICTAR 31.12.2006, 16:40 |
| Если тебе нужна двойная буфферизация, то сделай как написано в топике ниже (положи PaintBox на Panel или что-нибудь подобное и присвой DoubleBuffered:=true). |
| Автор: BreakMeThunder 31.12.2006, 17:12 |
| сделал все так... но все-равно как то медленно отрисовывается... я несколько поясню задачу - дело в том что я делаю тайловую рпг, где при передвижении игрока происходит постоянный скролл. Размер одного тайла 30х30, размер видимой карты 19х19. Может еще что-нибудь посоветуете? |
| Автор: VICTAR 31.12.2006, 17:24 |
| Как мне кажется, стоит взглянуть на процедуру перерисовки... |
| Автор: BreakMeThunder 31.12.2006, 17:34 | ||
|
| Автор: Alexeis 31.12.2006, 18:20 |
| BreakMeThunder, А вообще сам битмап умещается в памяти или нет. Какого размера картинка? Возможно рисуется картинка превосходящая по размеру область экрана. |
| Автор: BreakMeThunder 31.12.2006, 18:27 |
| битмап размера 570х570 |
| Автор: Nicholas_S 1.1.2007, 14:01 |
| BreakMeThunder, копирование изображения происходит быстро, вопрос в скорости построения изображения. Ты можешь в этом убедиться, засекая время по отдельности для отрисовки и для копирования картинки. Для рисования, особенно для динамической смены изображений, использовать стандартный bitmap не есть оптимальный вариант. Для этого советую попробовать какой-нибудь сторонний компонент с высокой скоростью отрисовки. Например, очень хорошим является компонент TFastDIB, которым пользуюсь уже вот несколько лет и не нарадуюсь. Комопонент распространяется под GPL лицензией и ты можешь его найти в сети. Среди возможностей такие как: быстрое обращение к любому пикселю канвы, алгоритмы вывода примитивов, сглаженных линий, конвертирование глубины цвета, масштаирование и проч. В поставке идут неплохие примеры, так что разобраться не составит труда. |
| Автор: Alexeis 1.1.2007, 17:51 |
| Nicholas_S, я читал одну статью про делфийские компоненты для поддержки битмапов. Сравнивались 6 популярных библиотек, в том числе и стандартный TBitmap. Так вот он оказался по середине при этом отрыв по отношению к его соседям был небольшой, не больше 30%. Так что он нет так уж плох по скорости. Скорее всего тормозит не сама отрисовка учитывая, что размер картинки весьма невелик. |
| Автор: Nicholas_S 1.1.2007, 21:58 |
| Alexeis, конечно, стандартный bitmap не так уж и плох, однако сам понимаешь, использование для попиксельной работы с канвой вызывает иногда мандраж - скорости не хвататет (если посмотреть вглубь кода при получении/устновке цвета пикселя TCanvas, то сразу становится понятно, куда пропадает скорость). Для рисование стандартных примитивов аля квадрат/круг TBitmap более чем достаточно, безусловно. Просто думаю если автору поста будет интересно, посмотрит. TFastDIB мне чем понравился - это компонент по из разряда "вес продумано", наровне с TVirtualTree: грамотно, просто и доступно. В данном примере скорость отрисовки тормозит, конечно. |
| Автор: Nicholas_S 2.1.2007, 22:32 |
| Alexeis, лично я не люблю сканлайн изначально, неудобная штука. Насчет простых примитивов я сказал выше |
| Автор: Alexeis 2.1.2007, 23:59 |
| Nicholas_S, Чего его не любить? Это же прямой адрес карты в памяти. Какая разница как он получен? Если не нравится можно его самому переписать (в соседней теме я написал свой ScanLine). Что же может быть быстрее прямой записи в память? Только операции в видеокарте. |