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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстрое копирование Image в Image 
:(
    Опции темы
mrEvel
Дата 13.4.2007, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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;

По идее "мерцания" быть не должно. Но само копирование занимает очень много времени, т.к. я в цикле бегаю по пикселям и копирую цвета. 

ЕСТЬ ЛИ БОЛЕЕ БЫСТРЫЙ СПОСОБ КОПИРОВАНИЯ???

PM MAIL   Вверх
Yanis
Дата 13.4.2007, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

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



Цитата(mrEvel @  13.4.2007,  14:45 Найти цитируемый пост)
т.к. я в цикле бегаю по пикселям и копирую цвета. 

Самый медленный способ smile
Попробуй через ScanLine.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Rennigth
Дата 13.4.2007, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Yanis @  13.4.2007,  13:58 Найти цитируемый пост)
Попробуй через ScanLine. 

Тоже самое будет если не медленее...

mrEvel, 
BitBlt


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Alexeis
Дата 13.4.2007, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(Rennigth @  13.4.2007,  14:03 Найти цитируемый пост)
Тоже самое будет если не медленее...

  Шутишь? С каких пор прямая запись в память медленная операция? Другое дело, что отрисовка DIB несколько медленнее чем DDB, но этой скорости для простых вещей вполне хватает. Ну это так к слову.
  А вообще, на API можно не переходить, достаточно использовать метод Draw у Canvas, и тем самым нарисовать на его поверхности второй Image.


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

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

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


Новичок



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

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



немогли бы вы привести простенькие примеры со ScanLine и BitBlt???
PM MAIL   Вверх
Rennigth
Дата 13.4.2007, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Alexeis, 
Цитата(Alexeis @  13.4.2007,  15:23 Найти цитируемый пост)
Шутишь? С каких пор прямая запись в память медленная операция?

А SetPixel это что? Не прямая? Просто там проверяется валидность карандаша и Change-инг устанавливается. Попробуй протестить на скорость... Разница будет минимальна. Я даже незнаю с чего это все взяли что ScanLine чем-то быстрее чем SetPixel... 

PS: Наверное я не прав, но если так то пожалуйста, обоснуйте мне это и приведите пример...





--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Alexeis
Дата 13.4.2007, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



SetPixel - производит кучу проверок и конвертирует RGB цвет в нужный цветовой формат и записывает его в DDB.
  ScanLine - работает с DIB и возвращает только адрес начала растра в памяти, откуда он непосредственно копируется в видеопамять при отрисовке виндой. ScanLine не рисует. Рисование происходит при записи данных по адресу растра. Т.е. все производиться без проверок. Чисто запись в память. При использовании Draw (BitBlt) копирование производиться прямо в видеопамяти, потому оно происходит несколько быстрее, но при этом нет возможности адресовать каждые пиксель, точнее есть (SetPixel )но этот способ медленный. Т.е. это совершенно разные операции.

Это сообщение отредактировал(а) Alexeis - 13.4.2007, 18:28


--------------------
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.0529 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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