vc绘制艺术字并保存成图片

在mfc的dll中的 OnPaint(),全部代码如下:

void c::OnPaint()

{

  CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
DoDrawText(&dc,&rect);

}


void c::DoDrawText(CDC *pDC, LPRECT pRect)

{

   Graphics graph(pDC->m_hDC);

CString str1=L"同志们好";
USES_CONVERSION;
const WCHAR *str=T2W((LPCTSTR)str1);


///
Font font(L"华文新魏", 100);
/获取文字的宽度和高度
RectF bountRect;
graph.MeasureString(str,wcslen(str),&font,PointF(10.0f, 10.0f),&bountRect);  
float wid=bountRect.Width;
float hei=bountRect.Height;
CString strWid,strHei;
strWid.Format("%f",wid);
strHei.Format("%f",hei);
MessageBox(strWid);
MessageBox(strHei);


///
Color cols[] = {Color::Red, Color::Olive, Color::Yellow, Color::Green, Color::Aqua, Color::Blue, Color::Purple, Color::Fuchsia};
REAL bps[] = {0.0f, 0.15f, 0.3f, 0.45f, 0.6f, 0.75f, 0.875f, 1.0f};
LinearGradientBrush brush(Point(10, 10), Point(810, 10), Color::Black, Color::White);   // gradient倾斜的
brush.SetInterpolationColors(cols, bps, 8);  // interpolation插补
// graph.DrawString((const WCHAR*)(LPCTSTR)str,str1.GetLength(), &font, PointF(10.0f, 10.0f), &brush);

//下面进行把绘制的文字保存成图片
int imx=(int)wid;
int imy=(int)hei;
Bitmap mImg(imx,imy);
Graphics *g=Graphics::FromImage(&mImg);
g->SetPageUnit(UnitPixel);
g->DrawString((const WCHAR*)(LPCTSTR)str,str1.GetLength(), &font, PointF(0.0f, 0.0f), &brush);
CLSID pngClisid;
GetEncoderClsid(L"image/png",&pngClisid);
mImg.Save(L"N.png",&pngClisid,NULL);

}




int c::GetEncoderClsid(const WCHAR *format, CLSID *pClsid)

{

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

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值