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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Бысто залить прямоугольник указанным цветом 
:(
    Опции темы
ДЫМ
Дата 12.5.2006, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



У меня Bitmap размера 2000х2000, как мне наиболее быстро залить его указанным цветом? Есть что-то еще кроме FillRect? 
PM MAIL WWW   Вверх
Alexeis
Дата 12.5.2006, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



ДЫМ, немного быстрее будет при помощи PatBlt, но  FillRect её использует при перерисовке, так что скорость возрастет не намного, хотя на небольших картинках мне удавалось получить прирост скорости более чем в два раза!

Можно сконвертировать изображение в DIB - вызвав GetDiBBits, а затем в цикле присвоить каждый цвет, но при этом лишаемся ускорения видеокарты, так что врядли это даст прирост скорости, но попробовать стоит.

  

Это сообщение отредактировал(а) alexeis1 - 12.5.2006, 09:47


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

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

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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Самый быстрый способ:
Код

BitBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, 0, 0, 0, BLACKNESS);
 
PM MAIL   Вверх
Alexeis
Дата 12.5.2006, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Snowy, 
Цитата(ДЫМ @  12.5.2006,  05:59 Найти цитируемый пост)
 указанным цветом
 Не только черным и белым!
 


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

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

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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Зато быстро smile
Как говорил господин Форд: "Мы можем выпускать автомобили любого цвета, при условии, что этот цвет черный". 
PM MAIL   Вверх
ДЫМ
Дата 14.5.2006, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(alexeis1 @ 12.5.2006,  09:45)
ДЫМ, немного быстрее будет при помощи PatBlt, но  FillRect её использует при перерисовке, так что скорость возрастет не намного, хотя на небольших картинках мне удавалось получить прирост скорости более чем в два раза!

Можно сконвертировать изображение в DIB - вызвав GetDiBBits, а затем в цикле присвоить каждый цвет, но при этом лишаемся ускорения видеокарты, так что врядли это даст прирост скорости, но попробовать стоит.

А можно поподробнее? Почему лишимся ускорения видеокарты, ведь его и так нет, ни DirectX ни OpenGL не используются. 
PM MAIL WWW   Вверх
Alexeis
Дата 16.5.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



ДЫМ, дело в том, Windows обычно работает с аппаратнй версией битмапа т.е. не с DIB а DDB (Device Dependent Bitmap), что значит аппаратной - чаще всего такой DDB - грузится видео память для ускорения графического вывода. Получается, что GDI также не брезгует аппаратным ускорением. Так что получается 
Цитата(ДЫМ @  13.5.2006,  23:24 Найти цитируемый пост)
 ведь его и так нет
 не совсем верно. DIB - это аппаратно-независимый битмап т.е. полностью лишенный всякого ускорения. Для TBitmap такому режиму соответствует установка pixelFormat в pf24bit, pf8bit и т.д. - для DDB - это pfDevice. Для pf24bit, pf8bit можно использовать scanLine для прямой адресации к растру, для pfDevice - такое невозможно.
GDI Функции типа  BitBlt "охотно" работают с DDB, чем здорово облегчают нам жизнь smile  


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

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

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


Бывалый
*


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

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



Цитата(alexeis1 @  16.5.2006,  13:34 Найти цитируемый пост)
DIB - это аппаратно-независимый битмап т.е. полностью лишенный всякого ускорения. Для TBitmap такому режиму соответствует установка pixelFormat в pf24bit, pf8bit и т.д. 

Что же получается, если pixelFormat = pf32bit, то работа с TBitmap будет быстрее, чем при pixelFormat = pf24bit?
 
PM MAIL WWW   Вверх
Alexeis
Дата 19.5.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



ДЫМ, нет pf32bit анологичен pf32bit.
Цитата

pfDevice    The bitmap is stored as a device-dependent bitmap.
pf1bit    The bitmap is a device-independent bitmap with one bit per pixel (black and white palette)
pf4bit    The bitmap is a device-independent bitmap that uses a 16-color palette.
pf8bit    The bitmap is a device-independent bitmap that uses a 256color palette.
pf15bit    The bitmap is a device-independent true-color bitmap that uses 15 bits per pixel (RGB compression).
pf16bit    The bitmap is a device-independent true-color bitmap that uses 16 bits per pixel (bitfield compression).

pf24bit    The bitmap is a device-independent true-color bitmap that uses 24 bits per pixel.
pf32bit    The bitmap is a device-independent true-color bitmap that uses 32 bits per pixel (RGB compression).


таким образом только pfDevice представляет режим DDB, т.е. аппаратно-зависимый(или точнее аппаратно-совместимый). 


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


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

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