none
VB.NET​のGraphicsの​DrawString縦書きについて RRS feed

  • 質問

  • ​VB.NET​のGraphicsの​DrawString縦書きで
    StringFormat の FormatFlags をStringFormatFlags.DirectionVertical に指定し​て
    「℃」、「℡」を描画すると右に90度回転してしまいます。
    通常の文字と同じ向きに描画したいのですが、方法はありませんでしょうか?


    • 編集済み 2016年5月31日 4:55
    2016年5月31日 3:55

回答

  • もしかすると、Graphics の ​DrawString で簡単に実現するのは難しいのではないかと思います。

    1つの方法として、座標の計算が面倒ですが、描画するときに 1 文字ずつ文字列に対してループし縦書きとならない文字については回転させたり Flags.DirectionVertical ではない文字描画を行うように処理を行う方法があります。

    また別の方法として、Win32 の DrawText を使用すると 1 文字ずつ文字を判定せずに実現できるかもしれません。
    確認したところ少なくとも「℃」「℡」については正しく縦書きの描画が行えておりました。

    以上、参考になりましたら幸いです。
    • 編集済み kenjinoteMVP 2016年5月31日 6:21
    • 回答の候補に設定 星 睦美 2016年6月2日 2:23
    • 回答としてマーク 星 睦美 2016年7月12日 2:46
    2016年5月31日 5:54

すべての返信

  • もしかすると、Graphics の ​DrawString で簡単に実現するのは難しいのではないかと思います。

    1つの方法として、座標の計算が面倒ですが、描画するときに 1 文字ずつ文字列に対してループし縦書きとならない文字については回転させたり Flags.DirectionVertical ではない文字描画を行うように処理を行う方法があります。

    また別の方法として、Win32 の DrawText を使用すると 1 文字ずつ文字を判定せずに実現できるかもしれません。
    確認したところ少なくとも「℃」「℡」については正しく縦書きの描画が行えておりました。

    以上、参考になりましたら幸いです。
    • 編集済み kenjinoteMVP 2016年5月31日 6:21
    • 回答の候補に設定 星 睦美 2016年6月2日 2:23
    • 回答としてマーク 星 睦美 2016年7月12日 2:46
    2016年5月31日 5:54
  • 基本的に簡単な方法はないと思います。少し探してみましたが、以下のように一文字ずつ描くことで何とかなるかもしれません。

    Drawstring up to down textdirection right (like chinese old style)
    http://stackoverflow.com/questions/24970839/drawstring-up-to-down-textdirection-right-like-chinese-old-style


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2016年5月31日 9:22
    モデレータ
  • 今現在、一文字ずつの描画で対応してるのですが、一部不都合があって困ってる状況です。
    2016年6月1日 1:38
  • ありがとうございます。ためしてみます。
    2016年6月1日 1:39