GDI problème de netteté autour texte ajouté à un bitmap
boeledi
Messages postés1Date d'inscriptionlundi 17 mai 2004StatutMembreDernière intervention18 décembre 2007
-
18 déc. 2007 à 14:04
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 2009
-
19 déc. 2007 à 00:17
Bonjour à Tous,
Tout d'abord, je dois avouer que je suis totalement novice en programmation GDI. Ceci explique certainement ma question...
Dans le cadre d'un développement de site web .NET 2.0, je dois notamment créer des images dynamiquement, qui contiennent entre autre, du texte.
Bref, je crée un bitmap, lui assigne une couleur de fond, puis écris le texte et ainsi de suite jusqu'à sauvegarder l'image obtenue sur disque.
Tout va très bien sauf que lorsque je regarde de plus près le résultat obtenu (notamment en zoomant), je m'aperçois que ce n'est pas net tout autour du texte. On dirait que le fait d'avoir ajouté le text au bitmap a provoqué une sorte d'interférence entre les pixels qui se trouvent directement autour du texte.
Voici le code que j'utilise... Quelqu'un aurait-il une solution?
Merci d'avance,
Didier
Code source:
Public Sub Generate(ByVal vstrText As String)
' Image Container
Dim bmBitmap As Bitmap = New Bitmap(100, 150, PixelFormat.Format32bppArgb)
Dim grGraphic As Graphics = Graphics.FromImage(bmBitmap)
' random values for the colors
Dim rndNumber As Random = New Random(DateTime.Now.Millisecond)
Dim r, g, b As Integer
r = rndNumber.Next(0, 200)
g = rndNumber.Next(0, 200)
b = rndNumber.Next(0, 200)
' Background
Dim bgImg as Rectangle = new Rectangle(0,0,100,150)
Dim myBrush As New SolidBrush(Color.FromArgb(r, g, b))
grGraphic.FillRectangle(myBrush,bgImg)
myBrush.Dispose()
' Font
Dim myFont As Font = New Font("Times New Roman", 25, FontStyle.Bold) 'FontStyle.Regular
' text color
Dim myPen As New SolidBrush(Color.white)
' Text drawing
Dim myFont as Font= new Font("Arial", 10.0f, FontStyle.Regular, GraphicsUnit.Point)
grGraphic.DrawString(vstrText, myFont, myPen, New PointF(10.0f, 10.0f))
'Release Brush
myPen.Dispose()
' Affichage de l'image sur la page
bmBitmap.Save("d:\tests\test.jpg", ImageFormat.Jpeg)
'Dispose Font
myFont.Dispose()
'Dispose bitmap
bmBitmap.Dispose()
'Dispose graphical interface
grGraphic.Dispose()
End Sub
<!-- / message -->
<!-- attachments -->
A voir également:
GDI problème de netteté autour texte ajouté à un bitmap
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 18 déc. 2007 à 14:14
Bonjour,
Pas tout lu et ne sais même pas en quel langage c'est écrit... et ne veux pas le savoir.
Je dirais simplement ceci : quand on lisse, on lisse....
Si on ne veut pas lisser, on a du plus net, mais plus "en escalier" pour les diagonales. Si on lisse, on "adoucit" autour pour diminuer les "escaliers"..
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 19 déc. 2007 à 00:17
Mais non, il s'agit simplement du lissage tout à fait normal dans le dessin GDI (anti-aliasing).
Et heureusement qu'il existe, car faire du lissage sois même quand on écrit du texte, qu'on dessine des formes ou qu'on zoom une image, bonjour
Mais évidement, on peut le contrôler. Pour le texte, c'est la propriété TextRenderingHint de la classe Graphics:
Dim grGraphic As Graphics = Graphics.FromImage(bmBitmap)
grGraphic.TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixel grGraphic.DrawString(vstrText, myFont, myPen, New PointF(10.0f, 10.0f))