是要从视频流里采集到bmp图片,就是点击拍照按钮显示在界面指定位置上,点击一次显示一张图片,使用的是LoadImage,可是总是加载失败,图片是显示出来了,可是大小不一样,上下颠倒,左右颠倒,郁闷啊
CBitmap m_bitmap;
HBITMAP hbmp;
hbmp=(HBITMAP)::LoadImage(NULL,_T("test.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);CWnd *pWnd=GetDlgItem(IDC_PICTURE);
CDC *pDC=pWnd->GetDC();
pDC->SetStretchBltMode(STRETCH_HALFTONE); StretchDIBits( // 在视图客户区显示图像
pDC->GetSafeHdc(),
0,
0,
285,//760,//m_nMaxWid,
253,//650,//m_nMaxHei,
0,
0,
352, // 图像宽度
288, // 图像高度
pDataBuf, // 图像缓冲区
m_pBmpInfo, // BMP图像描述信息
DIB_RGB_COLORS,
SRCCOPY
);
pWnd->ReleaseDC(pDC);
CBitmap m_bitmap;
HBITMAP hbmp;
hbmp=(HBITMAP)::LoadImage(NULL,_T("test.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);CWnd *pWnd=GetDlgItem(IDC_PICTURE);
CDC *pDC=pWnd->GetDC();
pDC->SetStretchBltMode(STRETCH_HALFTONE); StretchDIBits( // 在视图客户区显示图像
pDC->GetSafeHdc(),
0,
0,
285,//760,//m_nMaxWid,
253,//650,//m_nMaxHei,
0,
0,
352, // 图像宽度
288, // 图像高度
pDataBuf, // 图像缓冲区
m_pBmpInfo, // BMP图像描述信息
DIB_RGB_COLORS,
SRCCOPY
);
pWnd->ReleaseDC(pDC);
0,
0,
352,
288,
0,
0,
352, // 图像宽度
288, // 图像高度
这样呢
CImage* sourceImage = new CImage;
sourceImage->Load("H:\\a.bmp");//大部分类型图片都可以
sourceImage->StretchBlt(*pDC,0,0,width,height,0,0,width,height,SRCCOPY);//width是图片宽度,height为高度
pDC->GetSafeHdc(),
0,
0,
285,//760,//m_nMaxWid,
-253,//650,//m_nMaxHei,
0,
0,
352, // 图像宽度
288, // 图像高度
pDataBuf, // 图像缓冲区
m_pBmpInfo, // BMP图像描述信息
DIB_RGB_COLORS,
SRCCOPY
);
这样就可以颠倒过来,没试验过,楼主试试
{
IPicture *pPic;
IStream *pStm;
BOOL bResult;
HANDLE hFile=NULL;
DWORD dwFileSize,dwByteRead;
//打开硬盘中的图形文件
hFile=CreateFile(lpstrFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile!=INVALID_HANDLE_VALUE)
{
dwFileSize=GetFileSize(hFile,NULL);//获取文件字节数
if(dwFileSize==0xFFFFFFFF)
{
CloseHandle(hFile);
return E_FAIL;
}
}
else
{
return E_FAIL;
}
//分配全局存储空间
HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,dwFileSize);
if(hGlobal==NULL)
return E_FAIL;
LPVOID pvData =GlobalLock(hGlobal);
if(pvData==NULL)//锁定分配内存块
{
GlobalFree(hGlobal);
return E_FAIL;
}
ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区
CloseHandle(hFile);//关闭打开的文件
GlobalUnlock(hGlobal); CreateStreamOnHGlobal(hGlobal,TRUE,&pStm);
//装入图形文件
bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);
GlobalFree(hGlobal);
if(FAILED(bResult))
return E_FAIL;
long hmWidth;//图片的真实宽度
long hmHeight;//图片的真实高度
pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight);
//将图形输出到屏幕上(有点像BitBlt)
bResult=pPic->Render(pDC->m_hDC,0,0,nScrWidth,nScrHeight,0,hmHeight,hmWidth,-hmHeight,NULL);
pPic->Release();
if(SUCCEEDED(bResult))
{
return S_OK;
}
else
{
return E_FAIL;
}
}
这个代码能正确显示图像,但是不知道哪里出问题,内存一直在缓慢上涨,望高手解答