用capCreateCaptureWindow获取了当前窗口的句柄以后能保存下来avi视频吗,我自己试了,不行的,不知道怎么回事。编译都是能通过的,点保存的时候没有数据的
代码
void CImageSampleDlg::DrawBitmapOnScreen() {
// Draw image bitmap
CDC* dc = m_wndPic->GetDC();
 
BITMAPINFO bmi;
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);  
bmi.bmiHeader.biWidth = (128*NDH_MODULES*NSP_MODULES);
bmi.bmiHeader.biHeight = -m_ImgHeight;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = 0;
bmi.bmiHeader.biXPelsPerMeter = 20000;
bmi.bmiHeader.biYPelsPerMeter = 20000;
bmi.bmiHeader.biClrUsed = 0;
bmi.bmiHeader.biClrImportant = 0; // Display bitmap  显示
SetDIBitsToDevice(
dc->m_hDC,
3, 2,
(128*NDH_MODULES*NSP_MODULES), 
m_ImgHeight-2,
0, 0,
0, m_ImgHeight,
m_pDispImage,
&bmi,
DIB_RGB_COLORS); ReleaseDC(dc);  
}
void CImageSampleDlg::OnKaishiluxiang() { m_hCapture=capCreateCaptureWindow("Image Sample",WS_CHILD|WS_VISIBLE,3,2,(128*NDH_MODULES*NSP_MODULES),m_ImgHeight-2,m_hWnd,0);   
CString filename;
   CFileDialog FileDlg(FALSE,"avi");
if (FileDlg.DoModal()==IDOK)
{
filename = FileDlg.GetPathName();
filename.GetBufferSetLength(filename.GetLength()+2);
filename.Insert(filename.GetLength(),'0');
filename.Insert(filename.GetLength()+1,'0');
capFileSetCaptureFile(m_hCapture,filename.GetBuffer(0));
capCaptureSequence(m_hCapture);
}}
void CImageSampleDlg::OnTingzhiluxiang() {
capCaptureStop(m_hCapture);
}void CImageSampleDlg::DisplayImageBuffer(USHORT *pBuffer) {  ///
// Create image - (buffer without header bytes)

int i = 0, p;
for (p=0; p<(129*NDH_MODULES*NSP_MODULES) * m_ImgHeight; p++) {
if ((p%129)!=0) { // Skip header pixels
m_pImage[i] = pBuffer[p];
i++;
}
} // If dual energy then sort image
if (m_bchkDualEnergy) 
DESplitImage(m_pImage, m_ImgHeight);
// Normalise image
int o;
long v;
for (int l=0;l<m_ImgHeight;l++) { for (p=0;p<(128*NDH_MODULES*NSP_MODULES);p++) { // Get address of pixel
o = (l*128*NDH_MODULES*NSP_MODULES)+p; // Normalise and clip pixel
v = (LONG)( (m_pImage[o] - m_pDarkData[p]) * ((DOUBLE)GAIN_FS / (m_pLightData[p] - m_pDarkData[p])) );
if (v>65534) v = 65534;
if (v<0) v = 0; // Save normalised pixel
m_pImage[o] = (USHORT)v;
} } // Create 8 bit colour bitmap from look-up-table for display
for (p=0;p<(128*NDH_MODULES*NSP_MODULES)*m_ImgHeight;p++)
m_pDispImage[p] = m_pLUT[m_pImage[p]];

DrawBitmapOnScreen();  /
}void CImageSampleDlg::OnUpdateImage() {

if (m_nLastBuffer >= IMAGEBUFFERCOUNT || m_nLastBuffer < 0 || m_nLastBuffer == m_nLastDisplayedBuffer)
return;

// Clear unused part of image
USHORT* pImage = m_rawbuffer + (m_nLastBuffer * m_dwImageSize);
int nSize = ((129*NDH_MODULES*NSP_MODULES) * m_nLastBufferLen);
memset(pImage + nSize, 0, (m_dwImageSize - nSize) * sizeof(USHORT)); // Display image
m_nLastDisplayedBuffer = m_nLastBuffer;
DisplayImageBuffer(pImage);   ////
}