StrokePath APIがあり、this methodを使用してテキストの「ストローク」をシミュレートすることができます。私はここでそれをコピーします:GDI +でDrawString関数を使用してテキストを描画するときにテキストを筆跡表示する方法は?
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 +からDrawString機能を使用しています。
テキストストロークをシミュレートするために、BeginPath
、EndPath
、StrokePath
の代替品がGDI +に存在するかどうか知りませんか?
EDIT:以下jschroedl
によってアドバイスに従い、私は次のことを試してみました:かなりギザギザの輪郭(拡大スクリーンショット)生産
CString str = L"Text";
Graphics grpx(dc.GetSafeHdc());
SolidBrush gdiBrush(Color(0xFF, 0xFF, 0, 0));
StringFormat gdiSF;
gdiSF.SetAlignment(StringAlignmentNear);
gdiSF.SetFormatFlags(StringFormatFlagsNoWrap | StringFormatFlagsNoFitBlackBox |
StringFormatFlagsNoFontFallback | StringFormatFlagsNoClip);
gdiSF.SetHotkeyPrefix(HotkeyPrefixNone);
gdiSF.SetTrimming(StringTrimmingNone);
grpx.SetTextRenderingHint(TextRenderingHintAntiAlias);
grpx.SetPixelOffsetMode(PixelOffsetModeNone);
grpx.SetInterpolationMode(InterpolationModeHighQualityBicubic);
GraphicsPath dd;
FontFamily gdiFF(L"Segoe UI");
const PointF pntF(0, 0);
dd.AddString(str, str.GetLength(), &gdiFF, FontStyleRegular, 58.0f, pntF, &gdiSF);
Pen penFF(Color(0xFF, 0xFF, 0, 0), 1.0f);
grpx.DrawPath(&penFF, &dd);
:
をアンチエイリアスでレンダリングする方法はありますか?
うーん。面白い。ありがとう。描画されているペンにアンチエイリアスを追加する方法があるかどうか不思議です。それはかなりチャッキーに見えます。 – c00000fd
私たちのコードを見ると、SetInterpolationMode(InterpolationModeHighQualityBicubic)を使ってGraphicsオブジェクトに設定しているようですが、Graphics-> SetTextRenderingHint(TextRenderingHintAntiAlias)とSetPixelOffsetMode(PixelOffsetModeNone)を呼び出す直前に「ブロックテキスト」を扱うコメントがあります。 – jschroedl
あなたは何も変わっていないことを知っています。私の更新された元の投稿コードを参照してください。 – c00000fd