现在的位置: 首页 > 综合 > 正文

CDC保存为各种格式图像

2018年04月06日 ⁄ 综合 ⁄ 共 1065字 ⁄ 字号 评论关闭

以下代码可以保存为bmp,jpg,emf,tif,gif等常用文件格式。

再把代码给你贴一下,以下代码要求.net2003以上环境,因为vc6.0无atlimage.h.如果你要用vc6.0,那么请在.net2003下去拷altimage.h,它是gdi+的包装类


#include <atlimage.h>
void CYourView::OnBnClickedOk()
{
 
CDC *pdc = GetDC();
HBITMAP hBitmap = NULL;
if ( pdc )
{
/**
* 创建位图段
*/
BITMAPINFO bmi;
LPBYTE pBits;
ZeroMemory(&bmi, sizeof(bmi));
CRect rcClient;
GetClientRect( rcClient);
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = rcClient.Width();
bmi.bmiHeader.biHeight = rcClient.Height();
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
hBitmap  = CreateDIBSection( pdc->m_hDC,&bmi,DIB_RGB_COLORS,(void **)&pBits,0,0 );

/**
* 创建兼容dc并选择位图段
*/
CDC dcMem;
dcMem.CreateCompatibleDC( pdc);
dcMem.SelectObject( hBitmap );

/**
* 在内存dc上(即位图段上)绘图
* 此函数你自己把你的绘制代码拿出来做成函数 void Paint( CDC *pDC)就行了
*/
dcMem.BitBlt(0,0,rcClient.Width(),rcClient.Height(), pdc,0,0,SRCCOPY);

/**
* 释放dc
*/
ReleaseDC( pdc );
}


/**
* 保存位图
*/
if( hBitmap )
{
CImage img;
img.Attach( hBitmap );
img.Save( "c:\\1.bmp");
img.Save( "c:\\1.jpg");
DeleteObject( hBitmap );
 
AfxMessageBox("ok");
}
}

抱歉!评论已关闭.