19,468
社区成员
发帖
与我相关
我的任务
分享
CBitmap bitmapdes,bitmapsrc;
CString filename;
HDC m_hMemDC;
LONG m_nWidth,m_nHeight;
CDC memdc;
CDC dcMemory;
CDC *pDC;
CRect rect;
CFileDialog file(TRUE, _T("(*.bmp)|*.bmp","*.bmp" ,OFN_EXPLORER ,"位图文件(*.bmp)"));
if(!file.DoModal())
return;
GetWindowRect(rect);
filename = file.GetPathName();
HBITMAP hbitmap = (HBITMAP) LoadImage(NULL,filename,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
bitmapsrc.Attach(hbitmap);
pDC = GetDC();
if(!memdc.CreateCompatibleDC(pDC))
return;
memdc.SelectObject(bitmapsrc);
pDC->StretchBlt(0,0,50,50,&memdc,100,100,50,50,SRCCOPY);
// 可以显示,但不知道如何保存
ReleaseDC(pDC);
//发贴后,有人回答,加入以下方法
HBITMAP hBitmap = CreateCompatibleBitmap(memdc.GetSafeHdc(), 50, 50);
HDC hNewDC = CreateCompatibleDC(memdc.GetSafeHdc());
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hNewDC, hBitmap);
BitBlt(hNewDC, 0, 0, 50, 50, memdc.GetSafeHdc(), 0, 0, SRCCOPY);
SelectObject(hNewDC, hOldBitmap);
bitmapdes.Attach(hOldBitmap);//保存为Cbitmap对象
SaveBitmapToFile(hOldBitmap,_T("C:\\a.bmp"));//保存为文件
//其中保存文件用(http://topic.csdn.net/t/20041206/22/3620850.html)
CRect rcClient;
GetClientRect(&rcClient);
CDC* pDC = GetDC();
CDC* pMemDC = new CDC();
pMemDC->CreateCompatibleDC(pDC);
CBitmap* pMemBmp = new CBitmap();
pMemBmp->CreateCompatibleBitmap(pDC, rcClient.Width(), rcClient.Height());
pMemBmp->SelectObject(pMemBmp);
pMemDC->BitBlt(0, 0, rcClient.Width(), rcClient.Height(), pDC, 0, 0, SRCCOPY);
SaveBitmapToFile(pMemBmp, _T("C:\\a.bmp"));//保存为文件
ReleaseDC(pDC);
delete pMemDC;
delete pMemBmp;
CRect rcClient;
GetClientRect(&rcClient);
CDC* pDC = GetDC();
CDC* pMemDC = new CDC();
pMemDC->CreateCompatibleDC(pDC);
CBitmap* pMemBmp = new CBitmap();
pMemBmp->CreateCompatibleBitmap(pDC, rcClient.Width(), rcClient.Height());
pMemBmp->SelectObject(pMemBmp);
pMemDC->BitBlt(0, 0, rcClient.Width(), rcClient.Height(), pDC, 0, 0, SRCCOPY);
BitBlt(hNewDC, 0, 0, 50, 50, memdc.GetSafeHdc(), 0, 0, SRCCOPY);
SaveBitmapToFile(pMemBmp, _T("C:\\a.bmp"));//保存为文件
ReleaseDC(pDC);
pDC->StretchBlt(0,0,50,50,&memdc,100,100,50,50,SRCCOPY);
// 可以显示,但不知道如何保存
//ReleaseDC(pDC);
//发贴后,有人回答,加入以下方法
HBITMAP hBitmap = CreateCompatibleBitmap(pDC->GetSafeHdc(), 50, 50);
HDC hNewDC = CreateCompatibleDC(pDC->GetSafeHdc());
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hNewDC, hBitmap);
BitBlt(hNewDC, 0, 0, 50, 50, pDC->GetSafeHdc(), 0, 0, SRCCOPY);
bitmapdes.Attach(hBitmap);//保存为Cbitmap对象
SaveBitmapToFile(hBitmap, _T("C:\\a.bmp"));//保存为文件
SelectObject(hNewDC, hOldBitmap);
CBitmap bitmapdes,bitmapsrc;
CString filename;
HDC m_hMemDC;
LONG m_nWidth,m_nHeight;
CDC memdc;
CDC dcMemory;
CDC *pDC;
CRect rect;
CFileDialog file(TRUE, _T("(*.bmp)|*.bmp","*.bmp" ,OFN_EXPLORER ,"位图文件(*.bmp)"));
if(!file.DoModal())
return;
GetWindowRect(rect);
filename = file.GetPathName();
HBITMAP hbitmap = (HBITMAP) LoadImage(NULL,filename,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
bitmapsrc.Attach(hbitmap);
pDC = GetDC();
if(!memdc.CreateCompatibleDC(pDC))
return;
memdc.SelectObject(bitmapsrc);
pDC->StretchBlt(100,100,50,50,&memdc,30,30,50,50,SRCCOPY); //从图像的30,30位置 截大小为50,50的图像
// 可以显示,但不知道如何保存
ReleaseDC(pDC);
CRect rcClient;
GetClientRect(&rcClient);
HBITMAP hBitmap = CreateCompatibleBitmap(memdc.GetSafeHdc(),
50,50);
HDC hNewDC = CreateCompatibleDC(memdc.GetSafeHdc());
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hNewDC, hBitmap);
BitBlt(hNewDC, 0, 0, 50, 50, memdc.GetSafeHdc(), 30, 30, SRCCOPY); //从图像的30,30位置 截大小为50,50的图像
SaveBitmapToFile(hBitmap,_T("e:\\a.bmp"));//保存为文件