图形转动锐利/像素化的原因
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图形转动锐利/像素化的原因相关的知识,希望对你有一定的参考价值。
我让组合框画出这样的字体名称:
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上运行良好。
答案
我找到了罪魁祸首:
出于某种原因,此行导致此行为:
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
以上是关于图形转动锐利/像素化的原因的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 输出像素化的圆圈到控制台。对图形或Minecraft有用。