保存BITMAP位图为各种图片

void CClipScreenToolDlg::OnBnClickedBtnSave()
{
	CBitmap* pBitmap=CBitmap::FromHandle(CopyScreenToBitmap(&m_RectTracker.m_rect,TRUE));
	CFileDialog FileDlg(FALSE,_T("png"),_T("未命名"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("PNG 图片格式 (*.png)|*.png|BMP 图片格式 (*.bmp)|*.bmp|JPG 图片格式 (*.jpg)|*.jpg||"));
	int nRet=FileDlg.DoModal();
	if (nRet==IDOK)
	{
		CString StringExe=_T("png");
		StringExe=FileDlg.GetFileExt();
		CString StringPath=FileDlg.GetPathName();

		CImage  Img;
		Img.Attach(*pBitmap);
		
		if (StringExe==_T("png"))
		{
			Img.Save(StringPath,Gdiplus::ImageFormatPNG);
		}else if (StringExe==_T("bmp"))
		{
			Img.Save(StringPath,Gdiplus::ImageFormatBMP);
		}else if (StringExe==_T("jpg"))
		{
			Img.Save(StringPath,Gdiplus::ImageFormatJPEG);
		}
		Img.Detach();
		PostQuitMessage(0);
	}
}

下面是获取位图,大家可以获取自己的位图:

 

HBITMAP CClipScreenToolDlg::CopyScreenToBitmap(LPRECT lpRect,BOOL bSave)
{
	ShowWindow(SW_HIDE);
	HDC hScreenDC,hMemDC;
	HBITMAP hBitmap,hOldBitmap;
	if (IsRectEmpty(lpRect))
	{
		return NULL;
	}
	hScreenDC=CreateDC(_T("DISPLAY"),NULL,NULL,NULL);
	hMemDC=CreateCompatibleDC(hScreenDC);
	int Left=lpRect->left;
	int Top=lpRect->top;
	int Right=lpRect->right;
	int Bottom=lpRect->bottom;
	if(Left<0) Left=0;
	if(Top<0) Top=0;
	if(Right>m_xScreen) Right=m_xScreen;
	if(Bottom>m_yScreen) Bottom=m_yScreen;
	int nWidth=Right-Left;
	int nHeight=Bottom-Top;
	hBitmap=CreateCompatibleBitmap(hScreenDC,nWidth,nHeight);
	hOldBitmap=(HBITMAP)SelectObject(hMemDC,hBitmap);
	
	BitBlt(hMemDC,0,0,nWidth,nHeight,hScreenDC,Left,Top,SRCCOPY);
	hBitmap=(HBITMAP)SelectObject(hMemDC,hOldBitmap);
	if (bSave==TRUE)
	{
		if (OpenClipboard())
		{
			EmptyClipboard();
			SetClipboardData(CF_BITMAP,hBitmap);
			CloseClipboard();
		}
	}
	DeleteDC(hMemDC);
	DeleteDC(hScreenDC);
	ShowWindow(SW_SHOW);
	return hBitmap;
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小米的修行之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值