您的位置:首页 > 其它

GDI+将CDC中画好的图像,保存到文件中

2017-12-09 19:07 405 查看
实现代码如下:

int CGDIPSDIView::GetEncoderClsid( const WCHAR* format, CLSID* pClsid ) //GDI+取得不同类型图片编码类型的函数
{
UINT  num = 0;          // number of image encoders
UINT  size = 0;         // size of the image encoder array in bytes

ImageCodecInfo* pImageCodecInfo = NULL;

GetImageEncodersSize(&num, &size);
if(size == 0)
return -1;  // Failure

pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1;  // Failure

GetImageEncoders(num, size, pImageCodecInfo);

for(UINT j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j;  // Success
}
}

free(pImageCodecInfo);
return -1;  // Failure

}

void CGDIPSDIView::GetGDIPBitMap( ) //测试函数
{
CDC* pdc = GetDC( ); CRect RT; GetClientRect( &RT ); //取得屏幕DC(你绘图的那个DC)及绘图区域

CDC memdc; memdc.CreateCompatibleDC( pdc ); //创建内存DC
CBitmap membmp; membmp.CreateCompatibleBitmap( pdc, RT.Width( ), RT.Height( ) ); //创建内存位图
memdc.SelectObject( &membmp ); //DC与位图勾连
memdc.BitBlt( 0,0, RT.Width( ), RT.Height( ), pdc, 0, 0, SRCCOPY ); //将屏幕DC(你绘图的那个DC)内容拷贝到内存DC当中,相当与将你的绘图拷贝到了membmp上。

Bitmap gBitMap( ( HBITMAP )membmp.m_hObject, NULL ); //创建通过构造函数或者通过FromHBITMAP函数创建一个Bitmap,注意它和Image的区别,一般不用Image,Image功能太少,是Bitmap的基类

CLSID bmpClsid;
GetEncoderClsid(L"image/bmp", &bmpClsid);
//设置编码参数
ULONG encoderQuality = 50;                                //压缩比例
EncoderParameters encoderParameters;
encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderQuality;
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParameters.Parameter[0].NumberOfValues = 1;
encoderParameters.Parameter[0].Value = &encoderQuality;

gBitMap.Save(L"c:\\1.bmp", &bmpClsid, encoderParameters); //保存成bmp

CLSID pngid;
GetEncoderClsid(L"image/png", &pngid);
Status status = gBitMap.Save(L"c:\\1.png",&pngid,NULL); //保存成png
membmp.DeleteObject( );
memdc.DeleteDC( );
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gdi 绘图