2020年4月27日月曜日

10周年

このブログをはじめて10年経ちました。

もう10年がんばるぞ。

2020年4月23日木曜日

GetFontStream() 解放する?しない?

こうした
using (System.IO.Stream gfs = m_typeface.GetFontStream())   
{
   XXXX
}
これでよいという確実な根拠はないのですが、使ったものは解放したほうが良いのだろうと思い、usingを使ってます。

気になった点は、自分でnewしていないので、usingで解放されるのか?

逆に勝手に解放してよいのか?という点も気になりました。


(気になった点①)Usingで解放されるか逆コンパイルして確認する
下記のサイトを参考に確認しました。

初期化なしのusing文ってOK?

初めて逆コンパイルしたので、自分へのメモも兼ねてやり方も記載してます。

(1)スタートメニュー → Visual Studio 2019
→ Developer Command Prompt for VS 2019 を起動する。


(2)ildasmと入力してEnter


(3)IL DASMというツールが起動するので、ここに作成したexeをD&Dする。
(4)確認したいメソッドをダブルクリックすると、コードを確認できる。

(5)Disposeが呼ばれているので、おそらく解放してくれるのではないかと思う。


(気になった点②)自分でnewしたオブジェクトではないけど解放して大丈夫か?
解放した後に、getしてみたけど、例外が飛んだりしないので大丈夫なのかな?
            System.IO.Stream gfs = m_typeface.GetFontStream();
            gfs.Close();
            gfs.Dispose();
            gfs = m_typeface.GetFontStream();

2020年4月15日水曜日

GlyphTypeface クラスのGetFontStream()メソッド

これまで、fontファイルにアクセスする際は、fontファイルを直接Openして、アクセスしてました。こんな感じです。
string sfontfile = フォントファイルのパス
FileStream fs = new FileStream(sfontfile, FileMode.Open, FileAccess.Read);


先日、MSDNで、GlyphTypeFaceクラスを見てたら、GetFontStream()というメソッドがあることに気づきました。


引用元 : https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.media.glyphtypeface?view=netframework-4.8


これ使えそうだなと思い、使ってみました。こんな感じです。
System.IO.Stream gfs = mytypeface.GetFontStream();
MemoryStream ms = new MemoryStream();
gfs.CopyTo(ms);
memorystreamにコピーしているのは、使い方がこれしか分からなかったためとなります。
元々Filestreamを使ってたので、Filestreamにキャストしたりしようとしてたのですが、うまくいかず、 とりあえずこの方法だと例外やエラーが発生しないので、こうしてます。


GlyphTypefaceをnewするときにフォントファイルのパスは必要なので、卵が先かにわとりが先かという感じもしますが、 一度GlyphTypefaceを作ってしまえばそこからフォントファイルにアクセスできるのは、利便性があると感じました。

2020年4月3日金曜日

異体字のメモ

(参考URL)概要がわかるサイト
・wikipedia
異体字セレクタ
・IPAのサイト
IVD/IVSとは


(参考URL)Unicodeコンソーシアムの異体字のページ
Ideographic Variation Database


わかったことのまとめ

(1)異体字とは?

同じ文字コードだけどちょっとだけグリフが違うようなものがある。それが異体字。

葛飾区と葛󠄀城市の葛が若干違う。どちらもU+854Bの文字コードだけど、グリフが少し違う。


(2)IVSとは?

Unicodeで異体字を扱うときに、文字コードにくっつける文字コード U+E0100~U+E01EF のこと。異体字セレクタの一種類。

(3)SVSとは?

Unicodeで異体字を扱うときに、文字コードにくっつける文字コード U+FE00~U+FE0F のこと。異体字セレクタの一種類。

(4)FVSとは?

Unicodeで異体字を扱うときに、文字コードにくっつける文字コード U+180B~U+180D のこと。異体字セレクタの一種類。モンゴル文字専用

(5)IVDとは?

異体字のデータベース。Unicodeコンソーシアムがこれを管理してて、ここに申請すると登録される。
Ideographic Variation Database
どうやって実現するか?
・.netのAPIで実現できないか探してみたけどなさそう。

・fontファイルを開いて、cmapテーブルを見るのがよさそう。... 大変そう...

2020年4月2日木曜日

令和の合字を使ってみた。

令和の合字U+32FFを含むフォント「IPAmj明朝フォント」v006.01をインストールして、EnumCharで表示してみました。



気になったこと。
・これまでの元号とブロックが異なる。
・令和がU+32FFでこのブロックの最後なので、次の元号はまたブロックがかわるのかな?
・このフォントだけなのかもしれないけど、令和だけ若干細い。