MFC在内存画图并生成图片靠谱一点_yuan1988219_新浪博客

void ScreenToBmp(CString strPath)
{
CRect rt(460, 230, 1600, 930);
CString strVal(L"");
CString strData(L"");
int nWidth = rt.Width();
int nHeight = rt.Height();
CDC* pdc = GetDC();

CDC MemDC; //首先定义一个显示设备对象

MemDC.CreateCompatibleDC(pdc);

CBitmap MemBitmap;//定义一个位图对象

MemBitmap.CreateCompatibleBitmap(pdc, nWidth, nHeight);

//将位图选入到内存显示设备中

//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上

CBitmap *pOldBit = MemDC.SelectObject(&MemBitmap);

//先用背景色将位图清除干净,这里用的是白色作为背景

MemDC.FillSolidRect(0, 0, nWidth, nHeight, RGB(255, 255, 255));

// CString filename;//名字 eg: xxx.jpg / xxx.bmp 。。。。。

// 这里用MemDC绘图//

MemDC.MoveTo(0, 0); 
MemDC.LineTo(100, 100);

// ......................................

USES_CONVERSION; //将cstring转化为const wchar*

WCHAR* pBuf = T2W((LPTSTR)(LPCTSTR)strPath);

//这里就是将内存中的绘图转化成图片了

Bitmap bm((HBITMAP)MemBitmap, NULL);//定义bitmap

CLSID pngClsid;

GetEncoderClsid(L"image/png", &pngClsid);

bm.Save(pBuf, &pngClsid, NULL);

MemDC.DeleteDC();
MemBitmap.DeleteObject();
pOldBit->DeleteObject();
ReleaseDC(pdc);
}


int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num = 0;
UINT size = 0;
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if (size == 0)
{
return -1;
}
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if (pImageCodecInfo == NULL)
{
return -1;
}
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;
}
}
free(pImageCodecInfo);
return -1;
}

其中
//生成图片的方式
// GetEncoderClsid(L"image/png", &encoderClsid); 
// GetEncoderClsid(L"image/bmp", &encoderClsid);
// GetEncoderClsid(L"image/gif", &encoderClsid);
// GetEncoderClsid(L"image/jpeg", &encoderClsid);
// GetEncoderClsid(L"image/tiff", &encoderClsid);
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值