|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.04.2008, 16:58 | #451 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,691
|
Да это должно быть еще быстрее
Попробуй обойтись всего одной строкой CopyMemory(dest,src,43); 43 я из пальца высосал, но работает же :-) Последний раз редактировалось Kostia; 19.04.2008 в 17:14. |
19.04.2008, 17:58 | #452 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
ГЫ, ...именно и пытался целиком взять память, но ошибка чтения постоянно, похоже отдельные строки записываются в разные места памяти, целиком не удается, только построчно.
Я вычислял размер и делал вот так: Код:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
19.04.2008, 18:10 | #453 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,691
|
Beermonza, ScanLine возвращает указатель всего на одну строку байтов а не на всю картинку
|
19.04.2008, 18:13 | #454 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
А если как-то так попробовать?
CopyMemory(@DrawBuf,@TerrBuf,SizeOf (TerrBuf)); Beermonza, ты так и не сказал, что с BitBlt, медленно? Есть ли разница в скорости с VCL'овскими методами?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
19.04.2008, 18:29 | #455 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,691
|
Люди!!! Этот код у меня выполнился за 72 миллисекунды!!!
Код:
А этот Код:
Последний раз редактировалось Kostia; 19.04.2008 в 18:33. |
19.04.2008, 19:04 | #456 | |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Цитата:
Вместо CopyMemory(DrawBuf.ScanLine[0], ... которое вы пробуете позже предлагалось GetDIBits/SetDiBits. В примере весь bitMap копируется в массив, в массиве делается обработка и массив возвращается обратно в bitMap. |
|
19.04.2008, 19:05 | #457 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
Вообще у меня есть на канве кроликометр=) с замером фпс, надо будет поприкручивать разные способы и посмотреть что получится. 2 Beermonza, а как у тебя все это попадает на экран из буфера, если не секрет?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
|
19.04.2008, 19:39 | #458 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
CopyMemory, MoveMemory это одно и то-же. Кстати, обе вызывают move().
Но, какая разница. Главное что копировать и куда. TBitMap - это объект Windows. Кто-ж нам даст указатель на его содержимое ? Единственное, что нам доступно, это Handle. ScanLine - метод VCL - сам распеределяет память и копирует туда из BitMap вызовом getDIBits. По пути еще делает кучу работы. |
19.04.2008, 20:15 | #459 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Попробовал пока Canvas.Draw, BitBlt, Assign. Скорость в той последовательности в к-рой я их привел, слева направо по убыванию.
Draw почти такая же скорость как и BitBlt, даже чуть выше. Assign в два раза медленнее остальных. И после его использования другие методы прежней скорости уже не показывают, процентов 70 от первоначальной (мерял фпс, использовал для замера Application OnIdle, Done = False). p.s. Нашел "баг" с Assign. Дело в том что тот битмап из к-рого я копировал, загружен из файла 24бит, у битмапа приемника битность явно не указывалась. После применения Assign к нему, в него переносится битность из источника, и вместе с этим падает скорость. Такая же "пониженная" скорость (только теперь уже изначально) если задать битность сразу, пришлось это сделать т.к. ScanLine иначе неправильно работает. Добавил ScanLine, тот что Костя доработал (postcount=459), вот результаты (fps): Draw 260 (раньше было 420, до того как pf24bit приемнику явно задал) BitBlt 258 ScanLine 232 (у меня работает заметно медленнее чем Draw и BitBlt) Assign 170 p.p.s. Добавил CopyMemory(@Buffer,@Fon,SizeOf(Fon) ); Результаты (довольно интересные): Draw 260 BitBlt 260 ScanLine 230 Assign 170 CopyMemory 510 - После CopyMemory fps меняется (методы с клавиатуры переключаются): Draw 298 BitBlt 298 ScanLine 465 Assign 510 CopyMemory 510 Вот такие интересные результаты. Кстати при применении CopyMemory все настройки битмапа приемника сбиваются, получается точная копия источника, в отличие от Assign - c ним настройки шрифта и кисти сохранялись.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 19.04.2008 в 21:33. |
19.04.2008, 21:49 | #460 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Вот исходный код этого теста
Код:
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 19.04.2008 в 21:52. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Уроки по созданию игр для новичков... | -=DeS=- | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 750 | 14.11.2017 20:26 |
Музыка программистов - как вы относитесь к АРИИ? | Весёлый Жека | Свободное общение | 46 | 10.10.2008 22:32 |
Конкурсы по созданию игр на Delphi | mutabor | Свободное общение | 0 | 15.06.2007 12:40 |
Работа по созданию ПО | remix | Фриланс | 3 | 22.04.2007 11:00 |