1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Windows 11のフォントぜんぶ抜く【C#】

Last updated at Posted at 2022-08-04

概要

現在の案件で、

  • Windows 95~98とか2000くらいの時代から定義されているフォントを大体で良いので全部プレビューしてほしい
  • 日本語の表示で縦書きになる「@」がついたフォントが出力できないと困る

とかいうある意味トンデモ要望を受けていて、その解決案を探った記録

開発環境

項目 説明
開発環境 Visual Studio 2019
ランタイム .NET Framework 4.8
API、フレームワーク WinForms(一部gdi32.dllなどWin32Apiネイティブのインポートを使用する)
実行時言語 en(日本語でも動くとは思う)

ソリューションファイル

やり方

  • @を含めたフォント一覧は、DllImportを使用して、EnumFontFamiliesExをWin32Apiからラッピング
  • フォントハンドルの取得は、CreateFontIndirectをWin32Apiからラッピング
  • 文字列の表示は、これまたWin32Apiの関数:TextOutで実行

つまり、C#を使っているがほとんどWin32Apiのごり押しである。

違う点とすれば、WinFormsでささっと画面表示したかったので、PictureBoxとBitmapを使用して、TextOutしたテキスト画像を作ったらBitmapにペタッと貼り付ける処理を加えた程度。あまり複雑なことはしとらん。

アプリケーション表示結果

System

ラスタフォントの一つ
過去、OS上のシステムで標準で扱われていた。
現在でも本当稀にこの画面が出てくることがあるが、この画面が出てくる時はかなり原始的なコードを叩いていることが多い。

多くのアプリケーションでこのフォントを正確に表示できなくなっている。

image.png

実際、Word 2019だとこうなる

image.png

縦向きではこんな感じ。

image.png

実は、私が知る限り、この「@」付きの縦書きフォントを取得する方法、または描画する方法は.NETでは公式では実装されておらず、
BitmapからDrawStringなどしてもこの表示を実現することが出来ない。

実際、Web上には、それを実現しようとして苦労している記事は結構散見される・・・。

FixedSys

これも特殊なラスタフォントの一つであるが
昔とは変わってしまって普通のゴシック体として扱われてしまうようだ。

image.png

image.png

コントロールパネルで見てみたんだが、

image.png

どう見ても普通のMSゴシックだよね?
ラスタフォントの拡大率云々の前に、近いフォントが見つからない・・・。

Terminal

image.png

これも普通のMSゴシックのような気がする。
しかしコントロールパネルを開くと

image.png

こうなる。

ラスタフォントだからか、適切な拡大率を指定しなければこのような表示は得られないのかもしれない。
別の関数をさらに追加して、ラスタフォントとしてきちんと反映されている拡大率を見定めていく必要がありそう

MS Serif

image.png

MS Sans Serif

image.png

この辺までは存在すら知らない人が多かったのではなかろうか。
(私もこの話をするまで知らなかった)

Small Fonts

image.png

image.png

すごくちっちぇえ

ここまでの共通点

image.png

OUT_PRECISIONがOUT_STRING_PRECISになっている。
つまり、以上のデータはラスタフォントである。

ラスタフォントは現在の.NETで動いているアプリケーション等ではまともに動かないことが多いようで、
これを映し出すにはネイティブコードでの実装が必要だ。

印刷用途を想定したアプリケーションを作る場合、この問題を無視できないのは厄介だと思う

Modern

image.png

Roman

image.png

Script

image.png

Courier

image.png

Marlett

image.png

この辺りは見慣れないフォントだが、比較的新しい気がする。
ただワープロソフトなんかには載っていない模様。

Arial

image.png

このあたりからは見慣れたフォントが続く。
しかし、Arialからでもたくさんの種類のフォントがあるのだが、これはCharSetが言語地域別で割り当てられている結果のようだ。

・・・以下略・・・

Malgun Gothic Semilight

image.png

image.png

image.png

image.png

なんと、縦書きもある

image.png

image.png

ハングル文字や漢字が多く含まれていて、CharSetでそれぞれ違うところを見ると、かなりアジア圏に意識したフォントのようだ

MSゴシック

image.png

CharSetを変えると化けるのがなかなか面白い

image.png

メイリオ&Meiryo UI

やっぱり、結構違うよねえ

image.png

image.png

image.png

image.png

Monotype Corsiva

image.png

なんと標準で斜体が入っているのは珍しい気がする

Palace Script MT

image.png

Vivaldi

image.png

まとめ

フォントで遊ぶのは楽しいが
過去のフォントを使ってほしいという案件を受ける場合には、
思っていたよりも数倍苦労させられるので、
この話を考えるときには事前検証をしっかりしておくこと

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?