Как быстро вывести массив точек на экран?
Есть двумерный массив точек, напирмер DWORD mas[800][600]. В каждом элементе массива содержится цвет пиксела.
Выводить этот массив на экран с помощью SetPixel() слишком медленно. Например так:
CPaintDC dc(this);
for (int i = 0 ; i < 800; i++)
for (int j = 0 ; j < 600; j++)
SetPixel(HDC(dc),i,j,mas[j]);
Есть ли более быстрый способ?
Заранее спасибо!
Проблема такая:
Есть двумерный массив точек, напирмер DWORD mas[800][600]. В каждом элементе массива содержится цвет пиксела.
Выводить этот массив на экран с помощью SetPixel() слишком медленно. Например так:
CPaintDC dc(this);
for (int i = 0 ; i < 800; i++)
for (int j = 0 ; j < 600; j++)
SetPixel(HDC(dc),i,j,mas[j]);
Есть ли более быстрый способ?
Заранее спасибо!
Посмотри функцию SetDIBits, а вообще советую - лучше переделай в одномерный массив (так в памяти понятней) и точку можно вычислять брать mas[i * 800 + j]. Тогда у тебя будет просто массив сканов. Почитай про битмапы.
Проблема такая:
Есть двумерный массив точек, напирмер DWORD mas[800][600]. В каждом элементе массива содержится цвет пиксела.
Выводить этот массив на экран с помощью SetPixel() слишком медленно. Например так:
CPaintDC dc(this);
for (int i = 0 ; i < 800; i++)
for (int j = 0 ; j < 600; j++)
SetPixel(HDC(dc),i,j,mas[j]);
Есть ли более быстрый способ?
Заранее спасибо!
StretchDIBits - gde ukazivaesh svoj masssiv...
StretchDIBits - gde ukazivaesh svoj masssiv...
VOID *lpBits:!!!:
VOID *lpBits:!!!:
ИМХО, рисовать массив точек лучше сначала в памяти в виртуальном контексте, а потом этот виртуальный контекст целиком копировать в реальный.
Посмотри функцию CreateCompatibleBitmap - и все что идет с ней.
Создание виртуального контекста:
HBITMAP m_memBitMap;//le bitmap pour l'ecran
HDC myDC;
myDC=GetDC(hWnd);
m_memDC=CreateCompatibleDC(myDC);
int maxX=2000;
int maxY=1000;
m_memBitMap = CreateCompatibleBitmap(myDC,maxX,maxY);
SelectObject ( m_memDC, m_memBitMap );
PatBlt(m_memDC,0,0,maxX,maxY,WHITENESS);
ReleaseDC(hWnd,myDC);
Копирование виртуального в реальный:
ИМХО, рисовать массив точек лучше сначала в памяти в виртуальном контексте, а потом этот виртуальный контекст целиком копировать в реальный.
Да именно так я и делаю(просто не стал усложнять свой первый вопрос). Но выводить в виртуальный контекст тоже надо быстро. Ну я так понял что это это можно сделать спомощь SetDIBits, только чтобы ее использовать столько всяких структур надо предварительно надо заполнить...
Всем большое спасибо.