19,468
社区成员
发帖
与我相关
我的任务
分享
void CTestDlg::OnButton1()
{
CDC *pDC;
pDC = CDC::FromHandle(::GetDC(NULL));
int Width = GetSystemMetrics(SM_CXSCREEN);
int Height = GetSystemMetrics(SM_CYSCREEN);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap memBitMap,*oldMemBitMap;
memBitMap.CreateCompatibleBitmap(pDC, Width, Height);
oldMemBitMap = memDC.SelectObject(&memBitMap);
memDC.BitBlt(0,0,Width,Height,pDC,0,0,SRCCOPY);
DWORD dwCount = 1280*800*4;
BYTE *pBitMapBits = new BYTE[1280*800*4];
ZeroMemory(pBitMapBits,dwCount);
DWORD dwTemp = memBitMap.GetBitmapBits(dwCount,(LPVOID)pBitMapBits);
CMemFile mfBitMap(pBitMapBits,(UINT)dwCount,0);
CMemFile mfNewBitMap;
MBmpToMImage(mfBitMap,mfNewBitMap);
CBitmap bpNewBitMap;
}
BOOL CTestDlg:: MBmpToMImage(CMemFile& cbfBmp, CMemFile& cbfImage/*, CString strType*/)
{
int iBmpSize = cbfBmp.GetLength();
HGLOBAL hMemBmp = GlobalAlloc(GMEM_FIXED, iBmpSize);
if (hMemBmp == NULL) return FALSE;
IStream* pStmBmp = NULL;
CreateStreamOnHGlobal(hMemBmp, FALSE, &pStmBmp);
if (pStmBmp == NULL)
{
GlobalFree(hMemBmp);
return FALSE;
}
BYTE* pbyBmp = (BYTE *)GlobalLock(hMemBmp);
cbfBmp.SeekToBegin();
cbfBmp.Read(pbyBmp, iBmpSize);
Image imImage(pStmBmp,TRUE);
CLSID clImageClsid;
int i;
i = GetEncoderClsid(L"image/jpeg", &clImageClsid);
int j = imImage.Save(L"C:\\x.jpg",&clImageClsid);
if (1 != j)
{
MessageBox("错误2");
}
return TRUE;
}