ラベル font の投稿を表示しています。 すべての投稿を表示
ラベル font の投稿を表示しています。 すべての投稿を表示

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でこのブロックの最後なので、次の元号はまたブロックがかわるのかな?
・このフォントだけなのかもしれないけど、令和だけ若干細い。

2019年4月10日水曜日

GlyphTypeFaceInfo V2.1 リリース

GlyphTypeFaceInfo V2.1 をリリースしました。
https://www.vector.co.jp/soft/winnt/writing/se499620.html
変更点
[機能追加]グリッドビューに文字を表示するように修正しました。
[機能追加]Ctrl + マウスホイールで拡大/縮小できるようにしました。
[機能追加]DataGridビューの文字列を選択したフォントで表示するようにしました。
 「do not display in slelected font」チェックボックスをONにすると、
  選択したフォントではなく、デフォルトのフォントで表示します。
[機能追加]フォントファイルの検索対象に下記のフォルダを追加しました。
 (システムドライブ):\Users\(ユーザー名)\AppData\Local\Microsoft\Windows\Fonts
 ※Windows10 1803以降このフォルダにインストールされる場合があるため。
[機能追加]文字の読み込み中に処理中のダイアログを表示するようにしました。
[その他]必須コンポーネントを変更しました。
 .Net FrameWork 4.5.2

2017年7月5日水曜日

ソフトハイフンってなんだ?

­Unicode : U+00AD
UTF-8 : C2AD

の文字コードを持つ「SOFT HYPHEN」という文字があるのですが、
この文字をVislau Studioで作ったRichTextBoxコントロールに入力しても、表示されない。

EXCELやメモ帳や、TextBoxコントロールには入力できるのに。

wikipediaによると特別な文字みたいなので、ひとまず気にしないことにしました。

https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%83%8F%E3%82%A4%E3%83%95%E3%83%B3

2017年7月4日火曜日

UTF-8 の文字を扱うプログラムのテスト

やりたいこと
UTF-8の文字を扱うようなプログラム(エディタみたいな)を作成した場合に、どこまでテストするのか?
を考えてみたので、備忘のため記録しておきます。

背景
ここは読み飛ばしても大丈夫です。
趣味で作っているプログラムなので、普段はあまり力をいれてテストしないのですが、
たまたま動かしてたら、片仮名の「ム」が文字化けする現象が見つかりました。


調査したところ末尾のバイトがa0の文字は文字化けすることがわかりました。

内部で使用しているプログラムのバグと思われるので、この現象自体は、一般的なことではないのですが、 文字コードのバイトのパターンで文字化けしたりするんだなぁという気づきがありました。

そこで、もうちょっとテストしてみよっかなと。
結果
いきなり結果ですが、こんな感じでテストしてみようと思ってます。


もともとのバグは1バイト目がa0の場合に発生するものだったので、とりあえず各バイト単位でパターンを網羅することで、類似のバグを見つけることができると思いました。

各バイトの取りうる値はwikipediaの記事を参考にしました。
https://ja.wikipedia.org/wiki/UTF-8
5バイト, 6バイトはUnicodeでは不正なシーケンスとあるので、考えないことにしました。
また、制御文字も除く予定です。
具体的に
テストする文字はバイトさえ網羅できれば任意ですが、
実際に使用する文字をこちらのページを参考に選定していきます。
https://seiai.ed.jp/sys/text/java/utf8table.html
1バイト目の2X~7Xまではこんな感じです。 ASCIIを網羅するような感じとなります。黄色い部分です

1バイト目の8X~BXは、2バイト/3バイト/4バイトのどの文字にも使われるのですが、一番若い物を使うことにすると以下のようになります。黄色い部分です
また 2バイト目のCX、DXを適当に抽出していきます。(緑色の部分)



こんな感じで繰り返していこうと思ってますが、文字を選ぶのがめんどくさそう...


追伸
UTF-8の4バイト文字の一覧表がweb上で見つからなかったことと、
途中で面倒になったことから、4バイト目と3バイト目は網羅することを断念しました。

テストできたところは下図の緑色のところです。

統合漢字拡張B~Dの文字の文字コードは調べてみたのですが、
F0AXXXXXしかみあたらず、3バイト目が8X,9X,BXとなる文字がどれなのか、分かりませんでした。

調べるのには、Google IMEの文字パレットを使用しました。

UTF-8の文字コードが表示されるので、便利です。

多分3バイト目が8X,9X,BXとなる文字は、U+E0000以降のどれかなのかとは思っているのですが、Googleの文字パレットだとCJK互換漢字補助までしか表示されないので(上図)、ここまででやめることに。

2017年6月15日木曜日

UTF-8の文字

UTF-8の文字コードがいまいちよくわかってませんでした。
ちょっと調べたので、備忘のためメモしておきます。

参考にしたサイト
https://ja.wikipedia.org/wiki/UTF-8

1バイト
ASCII文字 (123, ABC とか)

2バイト
ラテン文字とか(ÀÀÃÅとか)

3バイト
ひらがな、普通の漢字とか(あいうえおとか)

4バイト
サロゲートペアの文字(U+10000~U+10FFFF)の文字
※使う場合は文字コード表で確認した方がよいです。

2011年2月22日火曜日

fontを選択する

fontを選択するときに、フォントのファイル名ではなく、font名?でやりたいなぁと考えている。

InstalledFontCollectionを使うと、フォント名の一蘭がとれそうだけど、
それとフォントファイル名まではとれなそうだなぁ。

2010年11月7日日曜日

とりあえず。

フォントファイルの情報表示ソフトは、ひとまずこんな感じになってます。
まだ、簡単なテーブルしかやってないのですが。

グリフとかをちゃんと表示させれる気がしないので、
途中で挫折する可能性は高いです。