Advertisement Jump to content
Sign in to follow this  

Weird corruption when drawing text with DrawString

This topic is 1781 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

OK, so I'm experiencing the weirdest problem.  I'm drawing some text and it's showing up corrupted:



So, as you can see, the image on the left shows the corrupted text in Windows 8.1 and on the right the actual text is being rendered correctly in Windows 7.  


The corruption only happens when I have the CompositingMode set to SourceCopy and the TextRenderingHint set to SingleBitPerPixel (with and without GridFit).  I require SourceCopy as my compositing mode because I need to write to the alpha channel of the bitmap instead of blending the alpha with the bitmap contents.


The code that draws this text is incredibly simple, so I am at a loss as to why this is happening.  


Anyone else run into this problem?  Know of a way around it?


Here's the code that I used to repro the error:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Drawing.Text;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TestFontAntiAlisBug
    public partial class Form1 : Form
        private Bitmap _image;
        private Font _font;

        protected override void OnLoad(EventArgs e)

            _font = new Font("Andalus", 48.0f, GraphicsUnit.Point);
            _image = new Bitmap(256, 256, PixelFormat.Format32bppArgb);

            using (Graphics g = Graphics.FromImage(_image))
                g.CompositingMode = CompositingMode.SourceCopy;
                g.CompositingQuality = CompositingQuality.HighQuality;
                g.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;

                using (Brush brush = new SolidBrush(Color.White))
                    g.DrawString("Are you corrupted?", _font, brush, new PointF(0, 0));

        protected override void OnPaint(PaintEventArgs e)

            e.Graphics.DrawImage(_image, new Point(0, 0));

        public Form1()

Share this post

Link to post
Share on other sites

OK, so I finally found another person that has run into the same problem (this is from 2012... I'm astounded it's still an issue):


In the end I used the GraphicsPath method described by Gianpaolo64 (in the aforementioned link) and that solved my issue.


Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!