DOBON.NETプログラミング道掲示板
(現在 過去ログ3 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■34181 / inTopicNo.1)  DrawString前のFillRectangle有無により文字の太さが違う理由について教えて下さい
  
□投稿者/ Iraquser 一般人(7回)-(2019/03/04(Mon) 17:25:37)
  • アイコン環境/言語:[Win10 c#] 
    分類:[.NET] 

    いつもお世話になっております。
    ピクチャーボックスに文字列を描画する処理で発生する現象の理由が知りたくて
    投稿させて頂きます。
    
    ピクチャーボックスにDrawStringメソッドで文字列を描画する際、描画先となる
    Imageオブジェクトを事前にFillRectangleメソッドにて塗りつぶした後に描画す
    るのと、塗りつぶしをせずに描画するのとで、描画される文字の太さが変わるの
    は何故なんでしょうか。
    
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    namespace Test01 {
        public partial class Form1 : Form {
            public Form1() {
                InitializeComponent();
            }
            private PictureBox p = new PictureBox();
            private void Form1_Load(object sender, EventArgs e) {
                this.Size = new Size(300, 200);
                p.Size = this.ClientSize;
                p.Location = new Point(0, 0);
                p.BackColor = Color.White;
                p.BorderStyle = BorderStyle.FixedSingle;
                p.MouseClick += new MouseEventHandler(p_MouseClick);
                this.Controls.Add(p);
            }
            private void p_MouseClick(object sender, MouseEventArgs e) {
                Bitmap c = new Bitmap(p.Width, p.Height);
                Graphics g = Graphics.FromImage(c);
                Font f = new Font("MS UI Gothic", 20);
                if (e.Button == MouseButtons.Left) {
                    g.FillRectangle(Brushes.White, g.VisibleClipBounds);
                    g.DrawString("左ボタンを押しました。", 
                                 f, Brushes.Black, new Point(20, 20));
                } else if (e.Button == MouseButtons.Right) {
                    g.DrawString("右ボタンを押しました。", 
                                 f, Brushes.Black, new Point(20, 20));
                }
                g.Dispose();
                p.Image = c;
            }
        }
    }
    

592×201 => 250×84
イメージ
1551687937.png
/5KB
引用返信 削除キー/
■34182 / inTopicNo.2)  Re[1]: DrawString前のFillRectangle有無により文字の太さが違う理由について教えて下さい
□投稿者/ 魔界の仮面弁士 大御所(1214回)-(2019/03/04(Mon) 18:27:55)
  • アイコンNo34181に返信(Iraquserさんの記事)
    > ピクチャーボックスにDrawStringメソッドで文字列を描画する際、描画先となる
    > Imageオブジェクトを事前にFillRectangleメソッドにて塗りつぶした後に描画す
    > るのと、塗りつぶしをせずに描画するのとで、描画される文字の太さが変わるの
    > は何故なんでしょうか。

    g.DrawString を呼ぶ前に、g.TextRenderingHint に
    SystemDefault(=0) 以外の値をセットしてみてください。
引用返信 削除キー/
■34183 / inTopicNo.3)  Re[1]: DrawString前のFillRectangle有無により文字の太さが違う理由について教えて下さい
□投稿者/ 魔界の仮面弁士 大御所(1215回)-(2019/03/05(Tue) 07:22:16)
  • アイコンNo34181に返信(Iraquserさんの記事)
    > 描画される文字の太さが変わるの
    > は何故なんでしょうか。

    OS の ClearType 設定にも依存します。

    http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=21802
引用返信 削除キー/
■34188 / inTopicNo.4)  Re[2]: DrawString前のFillRectangle有無により文字の太さが違う理由について教えて下さい
□投稿者/ Iraquser 一般人(9回)-(2019/03/08(Fri) 07:37:31)
http://Win10 c#
  • アイコンNo34183に返信(魔界の仮面弁士さんの記事)
    魔界の仮面弁士さん、いつもお世話になっています。
    お礼の返信が遅れてしまい申し訳ありません。返信した積りだったんですが、)投稿されてませんでした(私の操作ミスと思います)。
    TextRenderingHint、対応して思い通りの結果が得られる事を確認しました。
    ClearTypeに関しては、開発環境を触る事は少々難しいんで、プライベートで試してみようと思っています。
    有難うございました。

解決み!
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -