Visual C++实现视频图像处理技术(2)
cyDib = wImgHeight;
SetLogicPal( hdc, cxDib, cyDib, 8 );
SetStretchBltMode (hdc, COLORONCOLOR) ;
bGrabMark = TRUE;
while (bGrabMark == TRUE)
{
if(msg.message==WM_LBUTTONDBLCLK)
bGrabMark = FALSE;
W32_ReadXMS2Buf (wCurrent_Frame,lpDib) ;
SetDIBitsToDevice (hdc, 0, 0, cxDib, cyDib, 0, 0,
0, cyDib, (LPSTR) lpDib,
bmi,
DIB_RGB_COLORS) ;
}
// 停止采集
W32_CAStopCapture();
::ReleaseDC( GetSafeHwnd(), hdc );
return ;
}
////将下面这个函数添加在视图类的CTestView::OnSize()函数中,就可以对系统的调色板进行设置。
void WINAPI InitLogicPal( HDC hdc , short width, short height, WORD bitCount )
{
int j, i;
short cxDib, cyDib;
LOGPALETTE * pLogPal;
j=256 ;
if ((pLogPal=(LOGPALETTE *)malloc(sizeof(LOGPALETTE) + (j*sizeof(PALETTEENTRY)))) == NULL)
return ;
pLogPal->palVersion=0x300;
pLogPal->palNumEntries=j;
for (i=0;i pLogPal->palPalEntry[i].peRed = i ;
pLogPal->palPalEntry[i].peGreen = i ;
pLogPal->palPalEntry[i].peBlue = i ;
pLogPal->palPalEntry[i].peFlags = 0;
}
hPal = ::CreatePalette(pLogPal);
delete pLogPal;
::SelectPalette(hdc,hPal,0);
::RealizePalette(hdc);
cxDib = width; cyDib = height;
if ( (bmi = (BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER) + j*sizeof(RGBQUAD))) == NULL )
return ;
//bmi为全局变量,用于显示图像时用
bmi->bmiHeader.biSize = 40;
bmi->bmiHeader.biWidth = cxDib;
bmi->bmiHeader.biHeight = cyDib;
bmi->bmiHeader.biPlanes = 1 ;
bmi->bmiHeader.biBitCount = bitCount ;
bmi->bmiHeader.biCompression = 0 ;
bmi->bmiHeader.biSizeImage = 0 ;
bmi->bmiHeader.biXPelsPerMeter = 0;
bmi->bmiHeader.biYPelsPerMeter = 0;
bmi->bmiHeader.biClrUsed = 0;
bmi->bmiHeader.biClrImportant = 0;
for (i=0;i bmi->bmiColors[i].rgbBlue = i ;
bmi->bmiColors[i].rgbGreen = i ;
bmi->bmiColors[i].rgbRed = i ;
bmi->bmiColors[i].rgbReserved = 0 ;
}
}