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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закраска TImage, хочется убыстрения работы 
:(
    Опции темы
hug
Дата 7.8.2007, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть картотека с фотографиями (BLOB)-поле
Если есть фотка то гружу ее из потока, а если нет принято решение закрашивать место под фото белым. Вот код закраски:
Код



procedure ClearImage(a: TDBImage);
var
    R:Trect;
begin
 with a.Picture.Bitmap.Canvas   do  
 begin
     Brush.Style:=bssolid; 
     Brush.Color:=clWhite;
     FillRect(ClipRect);
 end;
end;

Но эта закраска работает оч медленно. Даже медленнее чем грузить фото из базы?
Может кто-нибуть знает как быстрее Image сделать белым?
PM MAIL   Вверх
former
Дата 7.8.2007, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

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



Цитата(hug @  7.8.2007,  08:47 Найти цитируемый пост)
Может кто-нибуть знает как быстрее Image сделать белым?


Есть хороший компонент MyDBImage. Это стандартный DBImage с поддержкой jpeg и возможностью выводить надпись при отсутствии данных в поле. Вот тебе ссылка.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Alexeis
Дата 8.8.2007, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



hug, функция PatBtl (см. MSDN) это делает в несколько раз быстрее.


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

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

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


Новичок



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

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



Через TBitmap.ScanLine будет почто в 50 раз быстрее (замерял).
Примерно так:
Код

var B:TBitmap; x:Integer;
begin
B := TBitmap.Create;
B.Width := 200;
B.Height := 100;
B.PixelFormat := pf24bit;
For x := 0 to B.Height-1 do FillChar(B.ScanLine[x]^, B.Width*3, $FF);
img.Picture.Bitmap.ReleaseHandle;
img.Picture.Bitmap := B;
B.Destroy;
end;


Это сообщение отредактировал(а) somewhere - 9.8.2007, 15:32
PM MAIL ICQ   Вверх
s-mike
Дата 10.8.2007, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(somewhere @  9.8.2007,  15:16 Найти цитируемый пост)
Через TBitmap.ScanLine будет почто в 50 раз быстрее (замерял).

А где учтено время отрисовки на экране?

Добавлено через 41 секунду
ScanLine — это всего лишь заполнение массива данных в памяти. Отрисовка требует гораздо больше времени.
PM MAIL WWW   Вверх
somewhere
Дата 10.8.2007, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(s-mike @  10.8.2007,  09:29 Найти цитируемый пост)
Отрисовка требует гораздо больше времени.

Если вы хоть раз рисовали "напрямую" в видеопамяти, то поймете что примерно столькоже, сколько и заполнение массива. На скорость отрисовки в данном примере влияет только заполнения битмапа. В обоих случаях сама отрисовка выполняется самим компонентом TImage средствами WinAPI
PM MAIL ICQ   Вверх
Alexeis
Дата 10.8.2007, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



 s-mike, имел ввиду то что громкие заявления о скорости ничего не дают, так как большая часть времени тратиться на отрисовку битмапа, а не на заполнение его значениями цвета. На самом деле TImage использует не просто API а GDI в котором отрисовка битмапа весьма медленная операция, потому стремиться изо всех сил улучшать этот показатель нет смысла.


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

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

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


Новичок



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

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



Цитата(Alexeis @  10.8.2007,  11:58 Найти цитируемый пост)
потому стремиться изо всех сил улучшать этот показатель нет смысла.

Есть смысл улучшать любой показатель, влияющий на скорость. Тем более, что это дает значительный прирост. А вот медленная прорисовка самого битмапа, это уже косяк разработчиков. Возможно они тоже думали, что битмап проще нарисовать програмно, нежели аппаратно, используя возможности драйвера видеоадаптера. В любом случае ScanLine однажды мне сильно помог, сильно ускорив отрисовку...
PM MAIL ICQ   Вверх
s-mike
Дата 10.8.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(somewhere @  10.8.2007,  10:09 Найти цитируемый пост)

Если вы хоть раз рисовали "напрямую" в видеопамяти, то поймете что примерно столькоже, сколько и заполнение массива.

А вы рисовали? Будьте добры примерчик, как рисовать в Windows напрямую в видеопамяти. Тогда можете говорить, что эта операция также тривиальна и быстра, как и заполнение массива.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

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


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

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


 




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


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

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