DOBON.NETプログラミング道掲示板

ツリー一括表示

Nomalアイコン DrawString前のFillRectangle有無により文字の太さが違う理由について教えて下さい /Iraquser (19/03/04(Mon) 17:25) #34181 1551687937.png/5KB
Nomalアイコン Re[1]: DrawString前のFillRectangle有無により文字の太さが違う理由について教えて下さい /魔界の仮面弁士 (19/03/04(Mon) 18:27) #34182
Nomalアイコン Re[1]: DrawString前のFillRectangle有無により文字の太さが違う理由について教えて下さい /魔界の仮面弁士 (19/03/05(Tue) 07:22) #34183
  └Nomalアイコン Re[2]: DrawString前のFillRectangle有無により文字の太さが違う理由について教えて下さい /Iraquser (19/03/08(Fri) 07:37) #34188 解決み!


親記事 / ▼[ 34182 ] ▼[ 34183 ]
■34181 / 親階層)  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
違反を報告
[ □ Tree ] 返信 削除キー/

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

    g.DrawString を呼ぶ前に、g.TextRenderingHint に
    SystemDefault(=0) 以外の値をセットしてみてください。
違反を報告
[ 親 34181 / □ Tree ] 返信 削除キー/

▲[ 34181 ] / ▼[ 34188 ]
■34183 / 1階層)  Re[1]: DrawString前のFillRectangle有無により文字の太さが違う理由について教えて下さい
□投稿者/ 魔界の仮面弁士 大御所(1215回)-(2019/03/05(Tue) 07:22:16)
  • アイコンNo34181に返信(Iraquserさんの記事)
    > 描画される文字の太さが変わるの
    > は何故なんでしょうか。

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

    http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=21802
違反を報告
[ 親 34181 / □ Tree ] 返信 削除キー/

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

解決み!
違反を報告
[ 親 34181 / □ Tree ] 返信 削除キー/


Mode/  Pass/


- Child Tree -