![]() |
Графика в Windows API
Требуется вывести в окно большой массив точек (например 800 на 600). Функцией SetPixel это выводится очень долго. Подскажите пожалуйста, есть ли способ более быстрого вывода?
|
1. определись, совместимый код будет или быстрый (не на много)
2. определись как часто будешь переисовываться 3. определись с глубиной цвета (8/16/32 bpp) дальше варианты выбора: 1. используешь функции GDI или DirectX 2. если GDI, то CreateDIBitmap (типа кэширование) либо SetDIBitsToDevice 3. подстрой свой алгоритм под глубину цвета Код:
class DrawScreen |
pva, а возможны варианты с GDI+? Я видел, что в реальном коде, он принимался где нужна прозрачность, градиент для VB .NET.
И как насчёт OpenGL? |
Спасибо за ответ. На самом оказалось что мне не хватало функции ReleaseDC(hWnd,DC). Ее нет в стандартном коде и это сильно запутывает понимание.
|
Попробуйте использовать функции BitBlt и CreateCompatibleDC. Вторая создаёт виртуальный контекст устройства, на котором и можно рисовать: SetPixel, DrawLine и т.п. После чего копируйте образ из виртуального в обычный контекст с помощью функции BitBlt. Функция BitBlt очень быстрая. На виртуальном контексте тоже всё очень быстро "прорисовывается". Деталей я не помню, но идея именно такая. Удачи.
|
podsyp, нечто похожее на DirectXкий z-буфер.
|
Раз мы уже начали говорить о графике в win32, то не мог бы кто-то пояснить,чем принципиально отличается GDI от OpenGL?
Например,при создании окна необходимо похоже проинициализировать пиксельный формат с помощью структуры PIXELFORMATDESCRIPTOR.Так вот в ней можно выставить флаг либо PFD_SUPPORT_GDI, либо PFD_SUPPORT_OPENGL... |
Цитата:
Цитата:
|
Время: 03:20. |
Время: 03:20.
© OSzone.net 2001-