2017-01-16 2 views
0

J'essaie d'utiliser GDI en C# pour dessiner Code 128 code à barres. J'ai la police .ttf qui devrait fonctionner comme vecteur graphique (non RASTR):GDI dessiner le code à barres texte

 var bmp = new Bitmap(900, 100); 
     var g = Graphics.FromImage(bmp); 
     g.Clear(Color.White); 
     g.SmoothingMode = SmoothingMode.None; 
     g.InterpolationMode = InterpolationMode.HighQualityBicubic; 
     g.PixelOffsetMode = PixelOffsetMode.HighQuality; 
     g.DrawString(value, new Font("Code 128", 72), Brushes.Black, 0, 50); 
     g.DrawPath(new Pen(Brushes.Black, (float) 1.0), new GraphicsPath()); 
     g.Flush(); 

l'image résultat est large, je veux mettre à l'échelle à 0,5 (axe x seulement). Mais lorsque je redimensionne X à 450, l'image n'est pas claire. J'ai remarqué que l'image (quand il reste 900) est floue légèrement: enter image description here

Je pense que mon broblem sera résolu si l'image ressemblera ici:

enter image description here

Comment dessiner la chaîne de telle manière ?

+0

Désactivez également InterpolationMode! Les résultats doivent correspondre au pixel le plus proche. – TaW

+0

Merci @taw j'ai essayé, mais le résultat est le même – burzhuy

+0

Ceux-ci ont travaillé pour moi: 'e.Graphics.SmoothingMode = SmoothingMode.None; e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor; ' – TaW

Répondre

2

Le lissage du texte est contrôlé par la propriété TextRenderingHint. Définissez simplement cette propriété avant de rendre votre chaîne:

g.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;