Работа с растровыми изображениями
Листинг 17.10
void OnTestCHWND hWnd. int (*Test )(HDC ,HDC .int .int .int)) {
static int tmp;
char szRes[255];
_int64 Start-HightTimeO ;
for( int t-256; t>-0; t-t-1) //Цикл проявления заставки {
if(Tau)
//Если период запуска функции обработки не равен нулю, то после каждого ее //вызова в заголовок окна выводится время работы. {
Tï meCapt i on(hWnd. Врем я .Test(hdcMemS.hdcMemD.t.5.10).&Ti meP roc): tmp - Tau-TimeProc/1000: Delay(tmp): //Пауза tmp миллисекунд. }
else Test(hdcMemS.hdcMemD.t.5.10); //Вызов без показа времени работы. }
for( t - 0; t<-256; t-t+1) //Цикл гашения заставки. {
Test(hdcMemS.hdcMemD.t.5.10); //При гашении время не отображается
if(Tau) Delay(tmp);
}
int Res - ResHightTime(SpeedCPU.&Start); //Затраты на 512 запусков sprintf(szRes."Общее время fcli микросекунд".Res); SetWi ndowText(hWnd.szRes); }
Разные варианты обработки вызываются при помощи вызовов функций 0nTest(hWnd. DirectBitMapAss), OnTest(hWnd. Di rectBi tMapC) и им подобных.
Выбрав предварительно в меню нулевой такт Tau, можно получить суммарное время 512 выполнений функции обработки и оценить разницу в скорости визуально.
Прямой доступ к битовой карте может применяться для изменения контрастности картинки, получения качественного изображения при ее сжатии и растяжении. Для этого часто используют вычисление цвета принимающего фрагмента окна как взвешенную сумму цвета точки источника и ее ближайших соседей. Весовые коэффициенты суммирования при этом задаются так называемой матрицей свертки С - квадратной таблицей, сумма элементов Cxi которой обычно равна единице. Центральный элемент матрицы соответствует точке источника, а остальные умножаются на коды цвета точек, соседних с ней по вертикали, горизонтали и диагоналям. В библиотеке OpenGL предусмотрены стандартные средства работы с матрицей свертки, например функция gl Convoi uti onFi 1 ter2D( ). Эта библиотека позволяет задавать размер матрицы, особенности ее применения на границах изображения, компоненты цвета, к которым применяется свертка.