我用摄像头做视频监控,截取每一针的图片,然后用 SetDIBitsToDevice 显示到图片控件上,可是老是现实不了,我截取图片得格式是YUV格式,是不是YUV格式就不能在控件上显示?怎么解决?
附程序:
long lBufSize;
HRESULT hr;
LPBYTE pBuffer;
BITMAPINFO lpBmpInfo;
CWnd *pWnd;
CRect Rect;
VIDEOSTREAMINFO vsi;
hr=DSStream_GetCurrentDib(0, NULL, &lBufSize);
if (FAILED(hr))
{
MessageBox("申请内存失败!");
// return -1;
}
//申请图像缓冲区
pBuffer=new BYTE[lBufSize]; //采集图像到缓冲区
hr=DSStream_GetCurrentDib( 0, pBuffer, &lBufSize); // DSStream_GetCurrentDib(int iCardID, BYTE* pBuffer, long* pSize)将当前图像的 DIB 数据保存到内存中。pBuffer:指向预先分配的内存。可以为 NULL,此时 pSize 将得到保存图像需要的内存大小。pSize:若 pBuffer 不为 NULL,pSize 指示 pBuffer 的大小。为pBuffer 为 NULL, pSize 得到保存图像需要的内存大小。数 if (FAILED(hr))
{
MessageBox("采集图像失败!");
}
hr = DSStream_GetVideoInfo(0, &vsi, PREVIEW);//得到显示脚或录像脚的视频属性,包括视频子类型、帧率、图像的大小、颜色位率等。pVSI:返回视频属性。
if(SUCCEEDED(hr))
{ lpBmpInfo.bmiHeader = vsi.bmiHeader; } pWnd=GetDlgItem(IDC_XIANSHI); //IDC_XIANSHI 为图片控件ID
pWnd->GetClientRect(&Rect);
int Width,Height;
Width=Rect.Width();
Height=Rect.Height(); HDC hdc;
hdc=::GetDC(pWnd->m_hWnd);
hr=SetDIBitsToDevice(hdc, 0, 0, Width, Height, 0, 0, 0, lpBmpInfo.bmiHeader.biHeight, pBuffer, &lpBmpInfo, DIB_RGB_COLORS);
if (hr==0)
{
MessageBox("图像映射失败!"); } IDC_XIANSHI 是图片控件的ID可是程序运行结果是("图像映射失败!");
附程序:
long lBufSize;
HRESULT hr;
LPBYTE pBuffer;
BITMAPINFO lpBmpInfo;
CWnd *pWnd;
CRect Rect;
VIDEOSTREAMINFO vsi;
hr=DSStream_GetCurrentDib(0, NULL, &lBufSize);
if (FAILED(hr))
{
MessageBox("申请内存失败!");
// return -1;
}
//申请图像缓冲区
pBuffer=new BYTE[lBufSize]; //采集图像到缓冲区
hr=DSStream_GetCurrentDib( 0, pBuffer, &lBufSize); // DSStream_GetCurrentDib(int iCardID, BYTE* pBuffer, long* pSize)将当前图像的 DIB 数据保存到内存中。pBuffer:指向预先分配的内存。可以为 NULL,此时 pSize 将得到保存图像需要的内存大小。pSize:若 pBuffer 不为 NULL,pSize 指示 pBuffer 的大小。为pBuffer 为 NULL, pSize 得到保存图像需要的内存大小。数 if (FAILED(hr))
{
MessageBox("采集图像失败!");
}
hr = DSStream_GetVideoInfo(0, &vsi, PREVIEW);//得到显示脚或录像脚的视频属性,包括视频子类型、帧率、图像的大小、颜色位率等。pVSI:返回视频属性。
if(SUCCEEDED(hr))
{ lpBmpInfo.bmiHeader = vsi.bmiHeader; } pWnd=GetDlgItem(IDC_XIANSHI); //IDC_XIANSHI 为图片控件ID
pWnd->GetClientRect(&Rect);
int Width,Height;
Width=Rect.Width();
Height=Rect.Height(); HDC hdc;
hdc=::GetDC(pWnd->m_hWnd);
hr=SetDIBitsToDevice(hdc, 0, 0, Width, Height, 0, 0, 0, lpBmpInfo.bmiHeader.biHeight, pBuffer, &lpBmpInfo, DIB_RGB_COLORS);
if (hr==0)
{
MessageBox("图像映射失败!"); } IDC_XIANSHI 是图片控件的ID可是程序运行结果是("图像映射失败!");
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货