我有一个显示附注的地图,其可以包括大量文本的MFC应用程序。虽然大小和文本的字体往往不会发生太大的变化,文字的旋转变化相当大,为了与周围的老本行对齐。这基本上意味着,我必须做的创建和选择一个新的字体到显示上下文每次旋转的变化。像;

if (TextRotationChanges)
{
    m_pFont = new CFont;
    m_lf.lfEscapement = NewRotation;
    m_pFont->CreateFontIndirect(&m_lf);
}
CFont *OldFont = m_pDC->SelectObject(m_pFont);
m_pDC->TextOut(x,y,text,strlen(text));
m_pDC->SelectObject(OldFont);

这与大量的文字打交道时显然是缓慢的。是否有加快这件事没有去到不同的显示引擎,如D3D或OpenGL的方法吗?换句话说,我可以改变在现有所选字体的文本旋转?

n.b。我已经在屏幕上以可视尺寸试图提取它之前进行其他明显的优化,例如保证文本。

有帮助吗?

解决方案

创建和销毁许多GDI对象可能会很慢。你能做的就是在你的程序的启动创建360名的字体,让您可以在正确的旋转选择对象()从预制的字体的查找表,而不是按需创建它们。或者,您可以通过不使用lfEscapement而是利用SetWorldTransform()用适当的旋转矩阵(同样,你可以缓存的速度旋转矩阵)旋转文本。你不得不测试它是否会真正给你一个速度增益。

看到这里,我的问题 SetWorldTransform()和字体旋转一个问题,我有/有这种做法,但(没有时间回去看看它)。

其他提示

您肯定,问题是字体,而不是TextOut?点击 如果你想避免闪烁使用后台缓存的奥列格的想法是不坏。

如果我要使用一个图形引擎我想尝试开罗,因为这对于那些专门设计样的工作。结果 (它可以在Win32 DC表面直接呈现)

您应该先画出它的无形的DC比复制到您的DC。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top