QA@IT

DrawStringで文字列描画時の枠線について

20007 PV

画面上へ文字列を描画する処理を作成しているのですが、Graphicsの取得方法によって
表示されるイメージが変わってしまい困っています。

[現象]
以下の"Graphicsを取得1"と"Graphicsを取得2"で、"Graphicsを取得1"を有効にした場合、
描画した文字列に黒枠が表示されてしまう。
※フォントサイズを大きくしていくと黒枠は消えました。

既存のソースが"Graphicsを取得1"で作られているため、"Graphicsを取得1"の方法での解決手段は無いでしょうか?

// Graphicsを取得1
pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics g = Graphics.FromImage(pictureBox1.Image);
// Graphicsを取得2
//Graphics g = pictureBox1.CreateGraphics();

// フォントを作成
Font font = new Font("MS UI Gothic", 50.0F, FontStyle.Regular);

// 文字列を描画
g.DrawString("100", font, Brushes.Blue, new Point(0,0));

//オブジェクトを廃棄する
g.Dispose();

回答

内容が定まっていない画像に合成するからでしょうかね。

一旦消えてよいのであれば(new Bitmap してるから消えて平気ですよね?)、
背景色を指定してクリアするのが簡単じゃないかとは思います。

対象のオブジェクトがわからないといけないのが難点かもしれませんが。

    // Graphicsを取得1
    pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
    Graphics g = Graphics.FromImage(pictureBox1.Image);
    // Graphicsを取得2
    //Graphics g = pictureBox1.CreateGraphics();

    // フォントを作成
    Font font = new Font("MS UI Gothic", 50.0F, FontStyle.Regular);

    // 文字列を描画
    g.Clear(pictureBox1.BackColor);  // ※※ この行を追加
    g.DrawString("100", font, Brushes.Blue, new Point(0, 0));

    //オブジェクトを廃棄する
    g.Dispose();

それがどうしてもだめなら、TextRenderingHintで滑らかさを捨てればマシにはなるかもしれません。

    // -省略-

    // 文字列を描画
    g.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;    // ※※ この行を追加
    g.DrawString("100", font, Brushes.Blue, new Point(0, 0));

    //オブジェクトを廃棄する
    g.Dispose();

編集 履歴 (0)
  • flied_onion様

    ご回答ありがとうございました。
    頂いたヒントを元に、TextRenderingHintにAntiAliasを設定することで描画が改善されました!
    本当に助かりました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。