| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > Инвертирование Bitmap(GDI+) |
| Автор: VICTAR 4.2.2008, 19:43 |
| Всем привет. Использую GDI+(http://www.delphisources.ru/pages/sources/graph/2007_year/gdi_plus_api.html). Загружаю большую Bitmap`ку (примерно 5000 на 5000). Отображаю ее на PaintBox, который в свою очередь лежит на ScrollBox`e. Изображение скроллируется нормально. Затем инвертирую эту Bitmap`ку и при скролле возникают жуткие тормоза. Не могу понять, в чем тут дело. Тестовый проект прикрепляю(за исключением Bitmap`ки ) |
| Автор: Alexeis 4.2.2008, 20:26 |
5000 * 5000 * 3 = 72 Мб !!! Представь себе сколько займет отрисовка такой картинки! Ведь PiantBox не подозревает, что его область вывода небольшая и пытается все рисовать. |
| Автор: VICTAR 4.2.2008, 20:35 |
| Alexeis, ест-но в своем проекте я отрисовку делаю подругому Но эффект, который я описал, возникает независимо от способа отрисовки. |
| Автор: VICTAR 6.2.2008, 18:16 |
| Товарищи, может хоть у кого-нибудь есть хоть какие-нибудь предположения? Рассмотрю все варианты! |
| Автор: VICTAR 6.2.2008, 23:54 |
Но тут дело не в оптимизации.... Торможение возникает только после каких-либо операций с растром. |
| Автор: Alexeis 7.2.2008, 01:48 |
А если нарисовать всего 1 пиксель? Тоже будет тормозить? |
| Автор: VICTAR 7.2.2008, 01:50 |
| Сейчас проверю... Добавлено через 2 минуты и 18 секунд да, эффект тот же |
| Автор: Alexeis 7.2.2008, 02:02 | ||
В текущем примере я вижу что рисуется вся битмапка
А не только видимый фрагмент. После такого рисования возможно GPBitmap превращается в Dib секцию, а она уже рисуется по другому, возможно не так эффективно как обычны битмап. |
| Автор: VICTAR 7.2.2008, 02:08 | ||
где HScroll.Position - горизонатльный скролл VScroll.Position - вертикальный скролл pbx - PaintBox но почему же если с картинкой не производить никаких действий отрисовка происходит на ура! стоит только вызвать LockBits&UnlockBits и все! при скролле проц на 100% и память жрется как бешенная. вот в чем вопрос... Добавлено через 8 минут и 17 секунд По поводу прикрепленного примера: там у PaintBox align = alClient, а для кода, приведенного выше align = alNone. Это я на всякий случай, чтобы не было недоразумений. |
| Автор: MetalFan 7.2.2008, 09:15 |
| попробуй "скэшировать" обработанный TGPBitmap в TGPCachedBitmap. он должен быстрее рисоваться |
| Автор: VICTAR 7.2.2008, 18:46 |
| К сожалению TGPCachedBitmap не поможет, т.к. мне надо отрисовывать только видимую часть картинки, а с TGPCachedBitmap этого сделать нельзя. |
| Автор: VICTAR 17.2.2008, 06:23 |
| Отказался от использования GDI+. Удалось добиться нужного результат с помощью GDI. |