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 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 ; } } |