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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инвертирование Bitmap(GDI+), Непонятное поведение... 
V
    Опции темы
VICTAR
Дата 4.2.2008, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Всем привет.
Использую GDI+(GDI+ API).
Загружаю большую Bitmap`ку (примерно 5000 на 5000). Отображаю ее на PaintBox, который в свою очередь лежит на ScrollBox`e. Изображение скроллируется нормально.
Затем инвертирую эту Bitmap`ку и при скролле возникают жуткие тормоза.
Не могу понять, в чем тут дело.
Тестовый проект прикрепляю(за исключением Bitmap`ки )

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  test_graph.rar 3,02 Kb
PM MAIL   Вверх
Alexeis
Дата 4.2.2008, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(VICTAR @  4.2.2008,  18:43 Найти цитируемый пост)
Загружаю большую Bitmap`ку (примерно 5000 на 5000). 

  5000 * 5000 * 3 = 72 Мб !!! Представь себе сколько займет отрисовка такой картинки! Ведь PiantBox не подозревает, что его область вывода небольшая и пытается все рисовать. 


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

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

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


Эксперт
***


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

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



Alexeis, ест-но в своем проекте я отрисовку делаю подругому  smile 
Но эффект, который я описал, возникает независимо от способа отрисовки.
PM MAIL   Вверх
VICTAR
Дата 6.2.2008, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Товарищи, может хоть у кого-нибудь есть хоть какие-нибудь предположения? 
Рассмотрю все варианты!
PM MAIL   Вверх
Alexeis
Дата 6.2.2008, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(VICTAR @  6.2.2008,  17:16 Найти цитируемый пост)
Товарищи, может хоть у кого-нибудь есть хоть какие-нибудь предположения? 

  Засекай время, и определяй какие методы выполняются дольше всего smile , дальше будем думать чего можно оптимизировать. Сужай круг поиска.


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

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

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


Эксперт
***


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

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



Цитата(Alexeis @  6.2.2008,  18:31 Найти цитируемый пост)
дальше будем думать чего можно оптимизировать

Но тут дело не в оптимизации....
Торможение возникает только после каких-либо операций с растром.
PM MAIL   Вверх
Alexeis
Дата 7.2.2008, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(VICTAR @  6.2.2008,  22:54 Найти цитируемый пост)
Торможение возникает только после каких-либо операций с растром.

  А если нарисовать всего 1 пиксель? Тоже будет тормозить?


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

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

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


Эксперт
***


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

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



Сейчас проверю...

Добавлено через 2 минуты и 18 секунд
да, эффект тот же
PM MAIL   Вверх
Alexeis
Дата 7.2.2008, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



В текущем примере я вижу что рисуется вся битмапка 
Код

procedure TForm1.pbxPaint(Sender: TObject);
var
  lCanvas: TGPGraphics;
begin
  lCanvas := TGPGraphics.Create(pbx.Canvas.Handle);
  try
    if Assigned(lBmp) then
      lCanvas.DrawImage(lBmp, 0, 0, lBmp.GetWidth, lBmp.GetHeight);
  finally
    lCanvas.Free;
  end;
end;


А не только видимый фрагмент. После такого рисования возможно GPBitmap превращается в Dib секцию, а она уже рисуется по другому, возможно не так эффективно как обычны битмап.


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

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

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


Эксперт
***


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

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



Код

procedure TForm1.pbxPaint(Sender: TObject);
var
  lCanvas: TGPGraphics;
begin
  with pbx.Canvas do
    FillRect(ClipRect);
  lCanvas := TGPGraphics.Create(pbx.Canvas.Handle);
  try
    if Assigned(fBmp) then
    begin
      lCanvas.DrawImage(fBmp, GPRectMake(pbx.ClientRect),
        HScroll.Position, VScroll.Position, pbx.Width, pbx.Height, UnitPixel);
    end;
  finally
    lCanvas.Free;
  end;
end;

где HScroll.Position - горизонатльный скролл
VScroll.Position - вертикальный скролл
pbx - PaintBox
но почему же если с картинкой не производить никаких действий отрисовка происходит на ура! стоит только вызвать LockBits&UnlockBits и все! при скролле проц на 100% и память жрется как бешенная.
вот в чем вопрос...

Добавлено через 8 минут и 17 секунд
По поводу прикрепленного примера: там у PaintBox align = alClient, а для кода, приведенного выше align = alNone. 
Это я на всякий случай, чтобы не было недоразумений.
PM MAIL   Вверх
MetalFan
Дата 7.2.2008, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



попробуй "скэшировать" обработанный TGPBitmap в TGPCachedBitmap. он должен быстрее рисоваться


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
VICTAR
Дата 7.2.2008, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



К сожалению TGPCachedBitmap не поможет, т.к. мне надо отрисовывать только видимую часть картинки, а с TGPCachedBitmap этого сделать нельзя.
PM MAIL   Вверх
VICTAR
Дата 17.2.2008, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Отказался от использования GDI+.
Удалось добиться нужного результат с помощью GDI.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

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


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

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


 




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


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

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