![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| mrEvel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
Всем доброго времени суток!
У меня на форме есть timage. Мне его постоянно надо перерисовывать. Для этого я его стираю (на всё поле рисую белый прямоугольник) и начинаю рисовать заново. Рисование идет в цикле и поэтому есть достаточная задержка. Поэтому возникает "мерцание" (старая картинка -> белый фон -> новая картинка). Возникла идея, как это устранить (вспомнил из программирования под DOS похожую ситуацию): Делаю два timage.... пусть image1 и image2. Image1 надо перерисовывать. Когда надо перерисовать, то я копирую изображение из image1 в image2, затем image2.visible:=true; image1.visible:=false; Перерисовываю image1, и затем image1.visible:=true; image2.visible:=false; По идее "мерцания" быть не должно. Но само копирование занимает очень много времени, т.к. я в цикле бегаю по пикселям и копирую цвета. ЕСТЬ ЛИ БОЛЕЕ БЫСТРЫЙ СПОСОБ КОПИРОВАНИЯ??? |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 2 Всего: 111 |
Самый медленный способ Попробуй через ScanLine. |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: нет Всего: 76 |
Тоже самое будет если не медленее... mrEvel, BitBlt -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Шутишь? С каких пор прямая запись в память медленная операция? Другое дело, что отрисовка DIB несколько медленнее чем DDB, но этой скорости для простых вещей вполне хватает. Ну это так к слову. А вообще, на API можно не переходить, достаточно использовать метод Draw у Canvas, и тем самым нарисовать на его поверхности второй Image. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| mrEvel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
немогли бы вы привести простенькие примеры со ScanLine и BitBlt???
|
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: нет Всего: 76 |
Alexeis,
А SetPixel это что? Не прямая? Просто там проверяется валидность карандаша и Change-инг устанавливается. Попробуй протестить на скорость... Разница будет минимальна. Я даже незнаю с чего это все взяли что ScanLine чем-то быстрее чем SetPixel... PS: Наверное я не прав, но если так то пожалуйста, обоснуйте мне это и приведите пример... -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
SetPixel - производит кучу проверок и конвертирует RGB цвет в нужный цветовой формат и записывает его в DDB.
ScanLine - работает с DIB и возвращает только адрес начала растра в памяти, откуда он непосредственно копируется в видеопамять при отрисовке виндой. ScanLine не рисует. Рисование происходит при записи данных по адресу растра. Т.е. все производиться без проверок. Чисто запись в память. При использовании Draw (BitBlt) копирование производиться прямо в видеопамяти, потому оно происходит несколько быстрее, но при этом нет возможности адресовать каждые пиксель, точнее есть (SetPixel )но этот способ медленный. Т.е. это совершенно разные операции. Это сообщение отредактировал(а) Alexeis - 13.4.2007, 18:28 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |