![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
костярик |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 19.7.2006 Репутация: нет Всего: нет |
Здравствуйте!
У меня вопрос. Я часто работаю с графикой, обычно использую класс TBitmap (ScanLine). Интересно, есть ли другой, более быстрый способ вывести изображение на экран, не используя АПИ-шки типа OpenGL или DirectX. |
|||
|
||||
Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: нет Всего: 7 |
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Этот метод позволяет получить прямой доступ к памяти битовой карты изображения, что может быть быстрее этого? Другое дело отображение на экран! -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
костярик |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 19.7.2006 Репутация: нет Всего: нет |
В том-то и дело. Как вывести массив цветов на экран, наиболее быстрым образом? Это сообщение отредактировал(а) костярик - 21.7.2006, 05:13 |
|||
|
||||
Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 1 Всего: 54 |
BitBlt и FastBlt
-------------------- ![]() |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
PatBlt
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Kesh, функция FastBlt ни где не описана, если можно - ее параметры и название динамической библиотеки. (полностью ее прототип)
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 1 Всего: 54 |
Пардон, ошибся... не FastBlt, а MaskBlt
Добавлено @ 15:15 Хотя все-таки нет... Склероз пока еще не убил мой мозг...
Но работает он соответственно с DDSurface'ами... -------------------- ![]() |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
костярик, просил - это все таки directDraw, я понял что он хотел выводить при помощи GDI -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
костярик |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 19.7.2006 Репутация: нет Всего: нет |
Правильно, надо вывести массив цветов при помощи GDI. Тут вот BitBlt посоветовали, он копирует из одного контекста в другой. А как загнать цвета в контекст? |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
В него не нужно загонять просто
canvas.handle - это и есть контекст -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
костярик |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 19.7.2006 Репутация: нет Всего: нет |
Да, но у меня есть только массив из троек байтов (R, G, B) для каждого цвета. У меня еще нет канвы. Как же мне имеющийся массив загнать в контекст. TBitmap я не использую, а то, понятно, можно было б через скан лайн. Есть ли такая возможность? |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
CreateBitmapInderect - позволяет создать битмап в памяти, затем для него можно создать свой контекст. Он называется, что-то вроде контекста для памяти. Специальный контекст, не связанный ни с каким дескриптором окна. Это чистой воды Api операции. Я попробую поискать пример - когдато делал.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
А вот и пример нашел
LoadImage - Загружает картинку с диска getMem(BInfo, sizeOf(BITMAP)); - выделение памяти под структуру, которая будет использоваться для функции получения информации о битмапе - GetObject(bmp,sizeOf(BITMAP), BInfo); hBDC := CreateCompatibleDC(form1.Canvas.Handle); - создает новый контекст для структур в памяти (memory device context) т.е. для битовой маски совместимый с графическим адаптером. ипользуя в качестве образца контекст формы (подойдет любое окно). SelectObject(hBDC, bmp); - связывает дескриптор битмапа с полученным контекстом BitBlt(form1.Canvas.Handle, 0, 0, BInfo.bmWidth, BInfo.bmHeight, hBDC, 0, 0, SRCCOPY); - рисуем все что есть в контексте битмапа на контекст формы. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Alexeis |
|
||||||||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
А теперь рассмотрим как можно создать битмап в памяти не загружая его с диска
В начале заполняем информационную структуру bmiInfo: BITMAPINFO;
Затем создаем собственно сам битмап
На этом этапе нам уже нужен контекст DC (как его получить писал выше) (lpBits : PRGBTriple;) - указатель на карту. Однако полученный битмап является DDB - Device Dependent Bitmap (не смотря на то что функция называется CreateDIBSection), что не позволяет нам н напрямую обращатся к битам карты. Поэтому мы должны его сконвертировать в DIB. Для этого заново готовим структуру bmiInfo
И получаем битмап в нужном нам формате DIB_RGB_COLORS
В параметре lpBits получаем - адрес первого байта заветной битовой карты куда можно записывать битовый масив с учетом выравнивания каждой строки битмапа на границу 4-х байт (как в файле bmp) И чтоб в этом убедится можно протестировать пикселы выводя вручную их из памяти на форму (это медленный вариант - только для тестирования ![]()
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||||||||
|
|||||||||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |