2013-08-17 6 views
5

Mon problème est que je dois dessiner du texte sur une image bitmap monochrome. Le bitmap résultant doit être imprimé sur une imprimante POS thermique, de sorte que le bitmap doit être 1bpp.Dessin de texte sur une image bitmap monochrome en C#

Je ne suis pas bon en graphisme, alors j'ai essayé de trouver des échantillons. Voici ce que j'ai essayé:

Bitmap bmp = new Bitmap(300, 300, PixelFormat.Format1bppIndexed); 
using (Graphics g = Graphics.FromImage(bmp)) 
{ 
    Font font = new Font("Arial", 20, FontStyle.Bold, GraphicsUnit.Point); 
    g.Clear(Color.White); 
    g.DrawString(text, font, Brushes.Black, 0, 0); 
} 
bmp.Save(@"c:\x\x.bmp", ImageFormat.Bmp); 

Save à la fin était de vérifier le résultat. Avec ce code, j'obtiens l'exception suivante: Un objet Graphics ne peut pas être créé à partir d'une image qui a un format de pixel indexé.

Existe-t-il un moyen de dessiner du texte dans un bitmap de mémoire monochrome?

Juste pour info: J'ai besoin parce que mon imprimante POS stupide dessine un 0 exactement de la même manière comme O, ils sont donc impossible de distinguer ...

+0

Vous pouvez dessiner en bitmap normale puis convertir au format indexé: http://stackoverflow.com/questions/9010761/c-sharp-convert-bitmap-to-indexed -colour-format – BartoszKP

Répondre

6

Essayez ceci:

Bitmap bmp = new Bitmap(300, 300); 
     using (Graphics g = Graphics.FromImage(bmp)) 
     { 
      Font font = new Font("Arial", 20, FontStyle.Bold, GraphicsUnit.Point); 
      g.Clear(Color.White); 
      g.DrawString("Hello", font, Brushes.Black, 0, 0); 
     } 
     System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format1bppIndexed); 
     Bitmap newBitmap = new Bitmap(300, 300, bmpData.Stride, System.Drawing.Imaging.PixelFormat.Format1bppIndexed, bmpData.Scan0); 
     newBitmap.Save(@"c:\x\x.bmp"); 

Voici un lien qui pourrait aider: http://msdn.microsoft.com/en-us/library/zy1a2d14.aspx

Questions connexes