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

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

■33848 / inTopicNo.1)  GraphicsUnit.Document使用時に解像度に合わせて位置決めしたい
  
□投稿者/ うりうり 一般人(1回)-(2018/06/09(Sat) 17:55:53)
  • アイコン環境/言語:[c#] 
    分類:[.NET] 

    Graphics gのx,y座標にtextの文字列を書きたいのですが、指定されるx,yはミリ単位なため
    mm2pxでピクセル値に変換しています。

    g.DrawString(text, font, Brushes.Black, mm2px(x), mm2px(y));

    int mm2px(float mm) {
      return (int)(827.0 / 210.0 * mm);
    }

    上記式の827は、
    pd = new System.Drawing.Printing.PrintDocument();
    pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
    private void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) {
      MessageBox.Show(e.PageBounds.Width.ToString());
    }
    としたときに、827が表示されるためです。
    210はA4縦の紙幅[mm]です。

    今まではこの固定値で、gがPanelであってもPrinterであってもうまく行っていたのですが、
    g.PageUnit = GraphicsUnit.Document;
    とする必要が出てきました。

    そうするとgの解像度がPanelやPrinterによって変わるため、
    int mm2px(float mm) {
      return (int)(DPI / 25.4 * mm); // DPIにはGraphics.DpiXが入っている
    }
    としたのですが、見当違いの位置に表示されてしまいます。

    その見当違いが比例的であれば何か係数を掛ければいいのですが、
    Panelなら3倍ぐらい、Printerなら10倍ぐらいと全く違います。

    しかし表示される位置は合わないものの、表示されるフォントの大きさは
    正常であるため、それらは別な方法で調整をしているものと考えます。

    どのようにすればいいのか、教えて頂けないでしょうか。

    よろしくお願いいたします。

マルチポストを報告
違反を報告
引用返信 削除キー/
■33849 / inTopicNo.2)  Re[1]: GraphicsUnit.Document使用時に解像度に合わせて位置決めしたい
□投稿者/ Azulean 大御所(495回)-(2018/06/09(Sat) 20:55:39)
  • アイコン2018/06/09(Sat) 20:56:08 編集(投稿者)

    GraphicsUnit.Document で試したことはないので外しているかもしれませんが…。

    No33848に返信(うりうりさんの記事)
    > しかし表示される位置は合わないものの、表示されるフォントの大きさは
    > 正常であるため、それらは別な方法で調整をしているものと考えます。
    >
    > どのようにすればいいのか、教えて頂けないでしょうか。

    以下によると、数値単位は 1/300 インチらしいので、mm / 25.4 * 300.0 という感じですかね?(mm → インチ → 1/300 インチ)
    https://msdn.microsoft.com/ja-jp/library/system.drawing.graphicsunit
違反を報告
引用返信 削除キー/
■33850 / inTopicNo.3)  Re[2]: GraphicsUnit.Document使用時に解像度に合わせて位置決めしたい
□投稿者/ うりうり 一般人(2回)-(2018/06/09(Sat) 22:01:18)
  • アイコンAzuleanさん、お返事ありがとうございます。

    私は解像度を使って計算する必要があると思いDPIを使って
    試行錯誤していたのですが、Azuleanさんの回答を見てそうで
    ないと気付きました。

    実際にやってみると mm / 25.4 * 300 でうまく位置決めしている
    ので満足しています。

    ありがとうございました。

解決み!
違反を報告
引用返信 削除キー/



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

このトピックに書きこむ

Mode/  Pass/


- Child Tree -