CTestView::CTestView()
{
W32_Init_MPE1000();//初始化采集卡
W32_Modify_Contrast(50);//下面的函数是为了对采集卡进行预设置
W32_Modify_Brightness(45);//设置亮度
W32_Set_HP_Value(945);//设置水平采集点数
wCurrent_Frame = 1;//当前帧为1,获取的图像就是从这帧取得的
// 设置采集信号源,仅对MPE1000有效
W32_Set_Input_Source(1);
W32_CACardParam(AD_SETHPFREQ,hpGrabFreq);
W32_Set_PAL_Range(1250, 1024);//设置水平采集范围
W32_Set_VGA_Mode ( 1 );
wGrabWinX1 = 0; // 采集窗口的左上角的坐标
wGrabWinY1 = 0;
firstTime=TRUE;
bGrabMode = FRAME;
bZipMode = ZIPPLE;
/
lpDib=NULL;//存放获取的图像数据
}
CTestView::~CTestView()
{
W32_Close_MPE1000();//关闭采集卡
}
////显示采集的图象,双击鼠标采集停止
void CTestView::OnGraboneframe()
{
// TODO: Add your command handler code here
wCurrent_Frame = 1;
// 设置采集目标为内存
W32_CACardParam (AD_SETGRABDEST, CA_GRABMEM);
// 启动采集
if (lpDib != NULL)
{
GlobalUnlock( hglbDIB );
GlobalFree( hglbDIB );
}
// 分配内存
hglbDIB=GlobalAlloc(GHND, (DWORD)wImgWidth*(DWORD)wImgHeight );
lpDib = (BYTE *)GlobalLock( hglbDIB );
hdc = GetDC()->GetSafeHdc( ) ;
if(lpDib != NULL)
{
cxDib = wImgWidth;
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<j;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<j;i++) {
bmi->bmiColors[i].rgbBlue = i ;
bmi->bmiColors[i].rgbGreen = i ;
bmi->bmiColors[i].rgbRed = i ;
bmi->bmiColors[i].rgbReserved = 0 ;
}
}
|