我让组合框画出这样的字体名称:
Private Sub cboFontName_DrawItem(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles cboFontName.DrawItem
e.DrawBackground()
If (e.State And DrawItemState.Focus) <> 0 Then
e.DrawFocusRectangle()
End If
Dim objBrush As Brush = Nothing
Try
If e.Index > -1 Then
objBrush = New SolidBrush(e.ForeColor)
Dim sFontName As String = Me.cboFontName.Items(e.Index).ToString
Dim nFont As Font = Nothing
Dim nFontFamily = New FontFamily(sFontName)
If nFontFamily.IsStyleAvailable(FontStyle.Regular) Then
nFont = New Font(nFontFamily, 14, FontStyle.Regular)
ElseIf nFontFamily.IsStyleAvailable(FontStyle.Bold) Then
nFont = New Font(nFontFamily, 14, FontStyle.Bold)
ElseIf nFontFamily.IsStyleAvailable(FontStyle.Italic) Then
nFont = New Font(nFontFamily, 14, FontStyle.Italic)
End If
e.Graphics.DrawString(sFontName, nFont, objBrush, e.Bounds)
End If
Finally
If objBrush IsNot Nothing Then
objBrush.Dispose()
End If
objBrush = Nothing
End Try
End Sub
它一直很好,但是现在(我不知道我改变了什么),字体呈现锐利/像素化:
左边是看起来像之前的变化(漂亮而流畅),右边是当前的像素化版本。
此外,某些第三方控件突然呈现像素化,因此它似乎是应用程序范围内的效果。我无法控制这些第三方控件如何呈现文本。
我真的不知道是什么导致了这一点。
这是什么原因?
当我打电话
e.Graphics.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
......它再次平稳,但我确实发誓以前我不必这样做。我现在才发现它。
ps:右边的屏幕截图来自一个沙盒Windows,我在那里运行了旧的版本,所以不要对不同的滚动条外观感到惊讶。它曾经在非沙盒的Windows上运行良好。
答案 0 :(得分:0)
我找到了罪魁祸首:
由于某种原因,此行会导致此行为:
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias
但是我不知道为什么这样做导致像素化错误,并且在所有其他形式中也是如此,尽管我不在其他形式中使用此代码。
具体来说,我在下面的代码中使用它。 当我注释掉“g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias”这一行时,一切正常。
Public Sub DrawTextWEx(ByRef uBitmap As Bitmap, ByVal uText As String, ByVal uColor As Color, ByVal uStringFormat As StringFormat, ByRef uFont As Font, ByRef uAvailableRect As Rectangle)
Using g As Graphics = Graphics.FromImage(uBitmap)
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias
Using nBrush As New System.Drawing.SolidBrush(uColor)
g.DrawString(uText, uFont, nBrush, uAvailableRect, uStringFormat)
End Using
End Using
End Sub