C++ 在GDI+;中使用DrawString函数绘制文本时如何对其进行笔划;?
有一个GDI的API,可以使用它来模拟文本的“笔划”。我会复制到这里:C++ 在GDI+;中使用DrawString函数绘制文本时如何对其进行笔划;?,c++,windows,winapi,gdi+,gdi,C++,Windows,Winapi,Gdi+,Gdi,有一个GDI的API,可以使用它来模拟文本的“笔划”。我会复制到这里: void CCanvas::DrawOutlineText( CDC& dc, const CString& Text ) { const int RestorePoint = dc.SaveDC(); // Create new font CFont NewFont; NewFont.CreatePointFont( 700, TEXT( "Verdana" ), &dc );
void CCanvas::DrawOutlineText( CDC& dc, const CString& Text )
{
const int RestorePoint = dc.SaveDC();
// Create new font
CFont NewFont;
NewFont.CreatePointFont( 700, TEXT( "Verdana" ), &dc );
// Use this font
dc.SelectObject( &NewFont );
// Brush for pen
LOGBRUSH lBrushForPen = { 0 };
lBrushForPen.lbColor = RGB( 200, 150, 100 );
lBrushForPen.lbHatch = HS_CROSS;
lBrushForPen.lbStyle = BS_SOLID;
// New pen for drawing outline text
CPen OutlinePen;
OutlinePen.CreatePen( PS_GEOMETRIC | PS_SOLID, 2, &lBrushForPen, 0, 0 );
// Use this pen
dc.SelectObject( &OutlinePen );
dc.SetBkMode( TRANSPARENT );
dc.BeginPath();
// This text is not drawn on screen, but instead each action is being
// recorded and stored internally as a path, since we called BeginPath
dc.TextOut( 20, 20, Text );
// Stop path
dc.EndPath();
// Now draw outline text
dc.StrokePath();
dc.RestoreDC( RestorePoint );
}
在我的例子中,我使用GDI+中的函数来绘制文本
有人知道GDI+中是否有一种替代方法来模拟文本笔划,而不是BeginPath
、EndPath
和StrokePath
编辑:根据下面的jschroedl
建议,我尝试了以下方法:
这产生了相当参差不齐的轮廓(放大的屏幕截图):
知道如何使用抗锯齿进行渲染吗?我相信我们的代码会创建一个
GraphicsPath
对象,调用GraphicsPath::AddString()
获取文本路径,然后使用Graphics::DrawPath()绘制路径
更新:
基于块状文本,我进行了实验,认为这看起来有点平滑
grpx.SetTextRenderingHint(TextRenderingHintClearTypeGridFit);
grpx.SetSmoothingMode(SmoothingModeHighQuality);
grpx.SetPixelOffsetMode(PixelOffsetModeHalf);
我相信我们的代码会创建一个GraphicsPath
对象,调用GraphicsPath::AddString()
获取文本的路径,然后使用Graphics::DrawPath()绘制路径
更新:
基于块状文本,我进行了实验,认为这看起来有点平滑
grpx.SetTextRenderingHint(TextRenderingHintClearTypeGridFit);
grpx.SetSmoothingMode(SmoothingModeHighQuality);
grpx.SetPixelOffsetMode(PixelOffsetModeHalf);
嗯,很有趣。谢谢只是想知道是否有一种方法可以为正在绘制的画笔添加抗锯齿。它看起来很粗。看看我们的代码,我们似乎使用SetInterpolationMode(InterpolationModeHighQualityBicubic)在图形对象上设置了它,在调用Graphics->SetTextRenderingHintantialias(TextRenderingHintAntiAlias)然后调用SetPixelOffsetMode(PixelOffsetModeNone)之前,有一条关于寻址“块状文本”的注释:-)你知道这没有改变什么。看到我更新的原始帖子w/代码。更新了我的答案-我认为它更接近你想要的。嗯。有趣。谢谢只是想知道是否有一种方法可以为正在绘制的画笔添加抗锯齿。它看起来很粗。看看我们的代码,我们似乎使用SetInterpolationMode(InterpolationModeHighQualityBicubic)在图形对象上设置了它,在调用Graphics->SetTextRenderingHintantialias(TextRenderingHintAntiAlias)然后调用SetPixelOffsetMode(PixelOffsetModeNone)之前,有一条关于寻址“块状文本”的注释:-)你知道这没有改变什么。请看我更新的原始帖子w/代码。更新了我的答案-我认为它更接近你想要的。