|
发表于 2010-12-14 15:10:04
|
显示全部楼层
自己GDI刷屏呀
void DisplayDataThread(LPVOID param)
{
CProcessThread *pThread=(CProcessThread*)param;
memset(&pThread->m_BmpInfo, 0, sizeof(pThread->m_BmpInfo));
pThread->m_BmpInfo.bmiHeader.biSize = sizeof(BITMAPINFO) ;
pThread->m_BmpInfo.bmiHeader.biWidth = pThread->m_Width;
pThread->m_BmpInfo.bmiHeader.biHeight = pThread->m_Height;
pThread->m_BmpInfo.bmiHeader.biPlanes = 1;
pThread->m_BmpInfo.bmiHeader.biBitCount = 24;
pThread->m_BmpInfo.bmiHeader.biCompression = BI_RGB ;
pThread->m_BmpInfo.bmiHeader.biSizeImage = pThread->m_Width * pThread->m_Height * 3;
pThread->m_BmpInfo.bmiHeader.biXPelsPerMeter = 0;
pThread->m_BmpInfo.bmiHeader.biYPelsPerMeter = 0;
pThread->m_BmpInfo.bmiHeader.biClrUsed = 0;
pThread->m_BmpInfo.bmiHeader.biClrImportant = 0;
HDC hdc=GetDC(pThread->m_hWnd);
int x,y;
/************************使图像居中显示*********************************/
x=::GetSystemMetrics(SM_CXSCREEN); //获取系统当前分辨率
y=::GetSystemMetrics(SM_CYSCREEN); //获取系统当前分辨率
if (x>pThread->m_Width) x=(x-pThread->m_Width)/2-10;
else x=0;
if (y>pThread->m_Height) y=(y-pThread->m_Height)/2-50;
else y=0;
/***********************************************************************/
while(pThread->m_DisPlayFlag && pThread->m_LoopFlag)
{
if(pThread->m_DispPlayStart)
{
pThread->MirrorImage(pThread->m_pSensorBuf,pThread->m_TempBuf,pThread->m_Width,pThread->m_Height,pThread->m_OutMode);
if(RAWMODE==pThread->m_OutMode) pThread->BayerConvRGB24(pThread->m_TempBuf,pThread->m_pDisPlayBuf,pThread->m_Width,pThread->m_Height);
else pThread->YUV_To_RGB(pThread->m_TempBuf,pThread->m_pDisPlayBuf,pThread->m_Width,pThread->m_Height,pThread->m_OutMode);
::StretchDIBits(hdc, //显示
x,
y,
pThread->m_Width,
pThread->m_Height,
0,
0,
pThread->m_Width,
pThread->m_Height,
pThread->m_pDisPlayBuf,
&pThread->m_BmpInfo,
DIB_RGB_COLORS,
SRCCOPY
);
pThread->m_DispPlayStart=false;
}
Sleep(2);
}
ReleaseDC(pThread->m_hWnd,hdc);
_endthread();
} |
|