たまりば

パソコン・インターネット パソコン・インターネット三鷹市 三鷹市

スーパー電子手帳のカレンダーとドットマトリクス
2020年10月21日 21:49

今は別館のサイトの方に昔(2007年)書いた内容を、手直ししたり新たな考察を加えたりしたもの。
元のページはこちらだが、文字コードが指定されていないのでChromeなどの低機能なブラウザでは文字化けして見えないかもしれない。Firefoxをおすすめする。



むかーし、むかし。電子手帳というものがあったそうな。
今でもあるけど、今は「ぴーでーえー」なんて横文字で呼んだりして、過去の「電子手帳」という呼び名の方がカッコよくて自分は好きだ。大体皆PDAが何の略か知らないだろう。なにせ自分も知らないのだ。
(↑と当時書いたのだが、今はPDAも携帯電話に吸収されて無くなってしまった。諸行無常。)

その電子手帳が「ちょっと高価な子供のおもちゃ」になりだした頃の話。

思い出深い電子手帳を紹介しよう。カシオから発売されていた電子手帳だ。
「スーパー電子手帳」シリーズと、何かわからないがたぶん何か違う「スーパー電子手帳Jr.」シリーズ。
男児向け女児向けで様々な種類があり、「PKバトルリーグ」「ツインゴール」「ペットテレパシー」などある。

機能は定番の電話帳・カレンダー(スケジュール帳)・電卓。それに子供向けだから占いやらゲーム。
この電子手帳は7×7ドットのひらがなが4行×12文字表示できる。つまり普通に考えて縦32ドット×横96ドットだ。
96×32文字
ほとんどの表示は8×8単位(漢字は16×16)なのだが、例外がカレンダー。
カレンダー
こんな感じに3×5の数字を使っている。3×5は数字をまともに描ける最小のドット数と言ってよいだろう。
日曜祝日は白黒反転、数字横の点はスケジュールがあることを示す。

ここで疑問に思うことはないだろうか?
そう、カレンダーの最大行数は6行。数字は縦5ドット。つまり5*6+隙間5ドットで35ドットとなり、32ドットの画面をオーバーしてしまう。
6行ははみ出す

それでどうなっているかというと簡単なことで、その分のドットがきちんと用意されている。
しかし極限まで無駄を切り詰めているので、なかなかけったいな形になっており、
ドットパターン(実は横幅が誤り)
こうである。
もう惚れちゃいますね。
ここに、
カレンダーを表示した状態(横幅は誤り)
こうなるわけだ。

ところで、これでは日付の表示に画面全部を使ってしまい、曜日が表示できない。
分かりづらくないかって?
大丈夫。
スーパー電子手帳本体
本体の方に書いてあるから。



さて、ここからが新たな発見である。

この電子手帳、パッケージで画面の総ドット数を誇っているのを過去に見た覚えがある。
探すとこちらに発売元はツクダオリジナルだが見たところ同シリーズの「似顔絵電子手帳カラーリスト」のパッケージが見つかった。
3118ドット
「3118ドット」とある。
数えてみよう。メイン部が縦32×横96、加えてはみ出し部分が(4×9+3)が2個で、3150ドット。
おや、計算が合わない。差は3150-3118=32。32? 縦のドット数と同じだ。
まさか…と別に見つけた写真で数えてみると、確かに横は95ドットしかない。そこも切り詰めていたか。

しかし32ドット減らすと何が嬉しいのだろう。
切りの良い32×96=3072ドットには足りないし、よくあるアイコンのためにコモン線が1本多いタイプで33×96=3168なら32ドット減らさなくても足りる(ドットマトリクス外にアイコンがあるが見たところ16個であり、足りる)。
しかし、考えてみると追加のドットはすべて個別に制御する必要があるわけではない。
表示する図形は30・31の下の方と右の点だけ。
右の数字部は「31」しか表示しないので、字と地の2セグメント。左も、調べてみると「1」の字形は上で想像で書いたようなセリフ付きのものではなくデジタル数字の直線の「1」であったので、0と1を表示するには2セグメントで、地を合わせた3セグメントで済む。4つの点も足して合計わずか9セグメントで足りる。
実際には隣り合っていないドットを1つのセグメントにまとめることはできないので多少多くなるが、下図の左9セグメント右7セグメントでいけそうだ。
追加ドットパターン
このセグメントを制御する配線を考えてみよう。

…と、考えてみたら普通にはできそうにない。
何が問題かというと、この囲まれたセグメント。
囲まれたセグメント
ドットマトリクス部から横を1ドット削ることで使えるようになるセグメントは、1seg×32com分。(マトリックスの縦横のコモン線・セグメント線と個々のセグメントが紛らわしいので前者をcom・segと書く)
つまりこれだけではマトリックスにすることはできず、セグメント側を全体を1seg(使い方としてはコモン)に割り当ててcom側で制御するしかない。
これではセグメントの隙間を通しでもしない限り他のセグメントに囲まれたセグメントを個別に制御することができない。

これがcomがもう1本あればseg線を上から伸ばしてできるのだが…
1com×複数segでのパターン
もしくはsegが2本あれば2×Nのマトリックスにできてどうにかなるのだが…

と思ったが、よく考えたらそんなことをしなくてもできた!
囲まれたセグメントは1個だけ。1本だけならcom線も追加ドットに隣り合った最下段の1本を上から伸ばすことができる。
1seg×複数comでのパターン
周囲のアイコン含め、配線にも問題がない。
配線

このパターンだとうまく説明がつくことがある。
実物の表示は、YouTubeに動画があり、分かったのだが、
カレンダー実物
これを見ると、最下段でない日曜日には下に枠が付いていることが分かる。
最下段の数字が白黒反転した時は、ドット数からして下に枠がつかず、不自然である。つまり、下もう1列のドットは付けたくても付けられないのだと考えられる。
comがもう1本あって1com×複数segのパターンであれば、下もう1列は容易に追加できる。
1com×複数segで+1列
また、追加のドットを下ではなく上に付ければ、白黒反転時に端が切れるのが「30」「31」から「1」「2」になり、日曜を含まず休日表示が起こりにくい点、文字数が少ない点からこちらの方が好ましいと考えられるが、1と2を表示できるパターンは囲まれるセグメントが多く、この作戦は不可能である。0と1の下4ドットだからできたパターンなのだ。
1com×複数segのパターンであれば上に1と2のセグメントも可能だ。
1com×複数segで1・2のセグメント
もうひとつ、「1」の字形がセリフ付きでなく縦棒なのも、セリフ付きの形は不可能だったためとも考えられる。縦棒でも特におかしいわけではないが、3×5ドットの数字では1に上下や上だけにセリフを付ける方がよく見る気がする。
なお、segが2本ある場合では、下もう1列が不可、1と2のパターンが不可は同様だが、1に上だけならセリフを付けることができる。

実機は確認していないので合っているかはわからないが、今のところ観察結果を上手く説明できており、なかなか可能性が高いのではないかなと思っている。  

  • 7セグ亜種
    2019年09月07日 07:23

    液晶やLEDによる7セグメント表示器は数字を表示するために様々なところで用いられている。

    それとともに、7セグを元に、数字以外のものを表示するためにセグメントを付け加えたものや、一部の数字のみを表示するためにセグメントを省略した特殊なセグメント配置が用いられることがある。
    そのような7セグ亜種をまとめてみた。内部構造を見たもの・表示内容から構造を推測したもの・自分で考案したものがある。
    なお以下文中でセグメントの名前を一般的なA~Gで表す。
    7セグのセグメントの名前

    7未満セグ


    7セグメントからいくつか省いたり複数のセグメントを融合したりして、10個の数字のうちの一部のみを表示するもの。また数字以外も表示するものもある。

    ・BC
    BC
    2セグメント融合の1セグメント。(以下、複数が融合したセグメントは色を付けて表す)
    1が表示できる。無表示を0と見て、最上位に0と1だけを表示する桁があるように使う。
    使われる場所は最も多いだろう。一例として、12時間制の時計の10の位や、テスターなど各種機器で使われる。
    普通は7セグメントで10進1桁を表示するので、つまり1セグメント当たり1/7桁。それに対しlog102≒0.3桁分が1セグメントで表示できるのでとてもお得だ。
    また1は幅が狭いので、以降のもののようにセグメント数を減らすだけでなくスペースも減らせる利点もある。
    よく「½桁」として勘定される。例えば普通の7セグが3桁と最上位にこれがある場合「3½桁」のように。
    「½」の意味については「1桁は(BCDで)4bit使うのに対し、1と-の2つのセグメントでは2bitなので½」という説を見つけた。
    http://act-ele.c.ooco.jp/blogroot/igarage/article/2235.html
    あまり説得力のある説には思えない。「half」や「半」がきっかり0.5を表すことばかりでもないように、単に1桁より少ないことを表しているのだと考える方が自然に思う。

    ・BC-G
    BC-G
    上記「1」に加えて「-」を表示するために中央のセグメントを加えたもの。上記2bit説によればこれのみが本来の「½桁」。
    1と「-」、およびくっついてしまうが「-1」も一応表示できる。
    またそもそも普通の7セグメントでも1桁で「-1」を表示することができる。7セグ2桁で下が-19まで表示できる温度計など存在したような、-9までしか表示できないものも存在したような、曖昧な記憶がある。
    なお、7セグとは関係ない形で「-」のセグメントを用意することもできる。
    BC-マイナス
    セグメント数は同じで、くっつかなくできるので、こちらの方が優れていると思う。

    ・ADEG-B-C
    ADEG-B-C
    一見6セグメントだが4セグメント融合したわずか3セグメント。1と2が表示できる。
    24時間制の時計の10の位にこの形が使われているのをよく見る。内部構造までは分からないが、最小で済むこの分割の可能性が高いと思う。

    ・ADG-B-C-E
    ADG-B-C-E
    こちらは4セグメント。1と2に加え3も表示できる。
    上と同じ形だがセグメントの融合具合が異なる。可能性として存在するが、実例を見たことはない。1~3というのはカレンダーの日の10の位に便利かもしれない。あとは摂氏の温度計…は40℃は普通にあり得るからちょっとつらいか。

    ・AD-他
    AD-他
    6セグメント。7のみ表示できない。
    何に使うかというと、時計の10分/10秒の位に使う。見た時は感心した。

    ・ACF-他
    ACF-他
    5セグメント。567890が表示できる。
    さらに何に使うのか疑問だと思うがちゃんと実例がある。
    FMの周波数は60MHz帯または87.5-108MHz、日本のみ76-90MHzであり、10の位が6-0に収まっているのだ。

    ・AEF-D-G
    AEF-D-G
    3セグメント。CとFが表示できる。(他にEも)
    温度計用。摂氏と華氏の表示に使う。CとFの2つのセグメントを作った方が2セグメントで済んでいい気もするが、この方が大きく表示できるのが利点か。また、常時表示のセグメントがあれば1セグメントは統合して2セグメント相当にもできる。
    図が左上3セグメントが分割されていないのは体温計で見つけた実例に合わせた。

    他に7セグメントから融合させて何か有用な配置ができないかと探すとこんなものが見つかった。
    ・ACDF-BE-G
    ACDF-BE-G
    3セグメント。5と8と0が表示できる。
    最小表示単位が5の時に使えそう。
    電気ポットで5度刻みおよび98℃を表示するものがあってもしやこれではと思ったがその後「h」も表示しているのを見たので違った。

    ・AD-CF-B-E-G
    AD-CF-B-E-G
    5セグメント。0, 2, 4, 6, 8と5(と9)が表示できるので、2刻みと5刻みの数が表示できる。

    7セグだけど普通じゃない


    ・左側が角ばっている
    8がB
    普通は8を表す表示をBとして使う。
    見かけたのは上野の科学博物館のエレベーター。エレベーターなのでもしかするとRも表示するかもしれない。最初見たとき8にしか見えなかった。
    この手の「通常の7セグで使う点灯の組み合わせを、セグメントの形をいじって別のものとして使う」ものは、普通の7セグとしての見方が邪魔をしてなかなか想定されたように見えないので、あまり好きでない。

    ・普通の7セグを1段下げて使う
    1段下
    μnpが表示できる。(他にcgijoqruも)
    コンデンサの容量表示に。
    秋月の容量計キットで見かけたのだが今探しても見つからない。販売終了だろうか。

    ・小数点付きのものを逆さに使う
    逆さ
    「℃」(や℉)として使える。マクドナルドだったかにあった機械の温度表示で見かけた。

    ・小数点付きで斜めのものを2つ点対称に並べる
    点対称
    コロンが出せる。時計キットで見かけたと思う。

    ・普通の7セグを普通に使う
    中国語の曜日が表示できる。
    中国語の曜日は月曜日~土曜日は星期一~六の数字である。
    ただ1つ日曜日のみは数字でなく星期日または星期天というが、なんと「日」は7セグで表せる。

    7セグ超


    7セグメントにいくつか追加して、全ての数字に加え他の文字(主に英字)を表示できるようにしたもの。

    ・縦線
    縦線
    +1セグメントでDMTWが表示できる。
    7セグで元から表示できるACEFGHIJLOPSUYと合わせアルファベット大文字のうち18文字が無理なく表示できる。
    いろいろなところに使えると思うが、よく見るのは曜日の1文字目である。SUN,MON,TUE,WED,THU,FRI,SATと、これが無ければ4/7が表示不能なのだ。

    ・縦線(2分割)
    縦線(2分割)
    Wikipediaに記載があったもの。全アルファベットが表示できるという。
    表示の情報は無かったので自分で頑張ってみたが少々無理がある。
    その後見つけたうみほたるさんによるフォント「紅亜鉛鉱9セグメント」がこちらだ。(pixivリンク)
    紅亜鉛鉱9セグメント
    違いがこう。
    9セグ_うみほたるさんのものとの差分
    Vの形は思いつかなかった。
    何にせよやはり少々無理がある。

    ・左上
    左上
    +1セグメントでRが表示できる。
    Rがあれば曜日の2文字目が表示できる。1文字目とは対照的に、2文字目はRだけが7セグで表示できない。
    小学校の時担任の教師が付けていた腕時計で使われていたもの。金曜日に「先生! 今日は金曜日ですが先生の時計の曜日の2文字目を見せてください!」とか言った気がする。
    しかしこれをRと読むには無理がある。あまりにも無理があったので図は左右で真ん中のくびれを変えておいた。
    Rを表示するセグメントは次の方が好みである。

    ・下に斜線\
    下に斜線\
    +1セグメントでRkQが表示できる。
    用途はまずは曜日の2文字目。昔進研ゼミのポイントを溜めて入手した腕時計に使われていた。防水だし気に入っていたのだが紛失してしまって悲しい。右下はC,Dセグメントを少し削って斜線を伸ばし絶妙に噛みあわせないとRが不格好になってしまう。どうもうまく再現できなかった。
    もう一つの用途として、トランプの表示がある。昔見たトランプの液晶ゲーム機で使われていた。1桁で数字およびkとQを表示し(AとJは元々表示できる)、左に「1」用のセグメントを追加して10を表示していた。10は「0」と表示してもよかったんではないかなと思う。なおこちらは斜線の右下を伸ばす必要はないので、図は別の形で示した。

    ・下に斜線/
    下に斜線/
    ふと思いついた小文字のaevzが表示できるセグメント。思いついた用途は曜日の2文字目と3文字目。
    下斜線で曜日
    7セグ亜種で曜日を大文字で表示しようと思うと、3文字目はTとNの両立が非常に困難であり、2文字にせざるを得ない。でも3文字のほうが読みやすいのでなんとかできないかなと考えていて思いついた。
    7セグで元から自然に表示できるbcdhijlnortuと合わせて16文字、特に母音すべてが表示できるようになるので、他にも何かと使いみちがあるかもしれない。

    ・16セグメント
    16セグ
    英字アルファベット(大文字)全26文字がほぼ自然に表示できる。対称性もよく、他にも様々な記号を表示できるポテンシャルがある。有名な形であり、この形のLEDや液晶はよく市販されている。
    敢えて問題点を探すと、BとDがやや不自然である。右側の丸みを出すことができないため、左を突き出すことで差をつけている。
    なおBの形は他にこれらも考えられるが、まあDと合わせたほうが自然だろう。
    他のB
    また、斜めのセグメントが外まで伸ばせないため、K,R,X,Yあたりで斜め線が短くなってしまうのもやや不自然である。特にXが一回り小さく見える。

    ・14セグメント
    14セグ
    実は英大文字の表示には16セグメントは要らない。上と下の横棒をそれぞれ1つにした14セグメントで上と同一の形状が出せる。実感として16セグより見かける頻度は少ない。

    ただ、英字大文字以外を考えると、16セグメントの自由度が欲しい。
    16セグメントあれば例えば、ギリシャ文字もそれなりに表示できる。
    14セグ_ギリシャ文字
    …と思ったらこれも14セグメントで足りる。
    なお、ΦとΩが微妙。

    16セグメントあればキリル文字もそれなりに表示できる。
    16セグ_キリル文字
    …まあ多少無理はあるが。
    ЙФЦЩあたりがちょっと微妙、Ёは無理だった。Ёの点はしばしば省略されるので許してほしい。
    ともかく、こちらはちゃんと16セグメント要る。ДЙЛЪЫЮで上下のセグメントの片方を使った。

    他に、記号類も16セグメントあった方が何かと作りやすいだろう。例えばBeatManiaで使われているのを見て感動した「!」だが、これも16セグメントがいる。
    16セグ_BeatManiaの「!」

    非7セグ亜種


    16セグメントを超える7セグ亜種は見た覚えがない。(その後下記の22セグメントを見つけた。文章の流れを直すのが面倒なのでそのままにする)
    これ以上増やしても新たな文字が表示できるようになったりしないのだろう。
    「曲」の字19セグメントでカタカナと漢数字を表示するという特許があったりするが、実際に使われたものではないだろう。
    もっと増やすとそろそろセグメント数がドットマトリクスに近づいてくる。例えば5×5の25ドットでカタカナと英字大文字が難なく表示できるのだ。

    ただし、扱える文字の増加ではなく、字形を自然にするために7セグとはかけ離れた形のセグメントを使うものはわりと存在する。雑に紹介しよう。

    シチズンの電卓で使われていたという「ナチュフェイス」という37セグメントの数字。
    ナチュフェイス
    http://nanzocamera1.cocolog-nifty.com/blog/2016/02/post-fb9d.html

    カリグラフィー風の数字。
    カリグラフィー風数字
    https://www.gizmodo.jp/2014/04/script.html

    駅の発車標の大小文字表示できるなんかやたら多いセグメントの表示器。

    他、ドットマトリクス亜種と呼ぶべきものもある。
    詳細は分からないが、5×7ドットからいくつか斜めに分割して日本語の曜日を表示していたもの。こんな感じの。
    5×7ドット斜め分割_曜日

    5×7ドットに追加で濁点と半濁点を表示するセグメント
    5×7に追加で(半)濁点

    昔雑誌に載っていた時計の曜日表示部分にあった、ドットマトリクスから融合したような、英字を一応表示できそうなもの。記憶は曖昧。
    ドットマトリクス融合_時計の曜日

    <ここにカッコいい締めの言葉を入れたかったが疲れた>


    (追記)


    ・22セグメント
    追加で、22セグメントでASCII全てを表示できるものを見つけた。
    こちらのページで紹介されていたものだ。
    https://romly.com/blog/nostalgic_led_displays/#1-8
    リンクから、
    YouTube動画: https://www.youtube.com/watch?v=D2cyZoCat_U
    Flickrの画像: https://www.flickr.com/photos/74hc595/5642138819/in/photostream/
    Archive.orgのデータシート: https://archive.org/details/bitsavers_litronixdaOptoelectronicsCatalog_31011858/page/n73/mode/2up
    が辿れる。

    DL-3422という型番で、動画中の説明によれば、
    ・1982年-1983年のデータブックにはpreliminaryデータシートとあり
    ・1986年のものにはnot for new designになっている
    ということで、どうもあまり市場に出回らなかったもののようである。

    セグメントを写し取ったものがこちら。
    22セグメントASCII
    16セグメントに加えて左下にクロスする斜線1本、ディセンダ用の3セグメント、上下に点を2個で計22セグメント。
    このわずかな追加で小文字をここまで自然に表示できるというのは驚きである。
    特に交差するセグメントが1箇所だけで済むのが意外だった。
    そして2つの点のセグメントもよくできていて、点と縦線を合わせて「,」と「;」の形にするのは見事という他ない。

    」印を付けたものは、YouTube動画で示された実物とFlickrからのリンクのデータシートで食い違うものである。どちらに統一するのも不自然であったので適宜自分の好みで選んだ。
    下に示すのが食い違っているもののそれぞれ左が実物、右がデータシートの字形である。上図で採用した方を赤く示した。
    22セグ_差異
    それぞれ解説する。
    9: どちらの字形もありだが、「6」に合わせてセグメントの多いデータシートの方が自然か。実物の方は「g」との混同を避けたとも考えられるが、高さが違うのであまり必要性が無さそう。
    ?: せっかく存在する「.」のセグメント(やや不自然な位置にあるが)を使っている実物の方が好み。
    B: 実物はおそらくミスだろう。下記のv,x,yほど不自然ではないが、あえてこの字形にする理由も見えない。
    J: 他が幅広の中で幅が狭いのはいかにも不自然。上にセリフを付けるならまだしも。
    V,v: 14・16セグメントのVでも左側に寄せるのが一般的だと思う。wを統一するためかもしれないが両側に開く形でよい。
    [,],`: データシートのグリフは全体の中での位置がきちんと描かれていないように見える。「[」「]」は明らかにセグメントの無い位置に描かれているのでおかしいと分かる。「`」も上に寄せた方が自然なのでこれも位置ずれだろう。
    _: これもデータシートの位置ずれかもしれないが、「_」はベースラインやや下が普通の位置のところ、ベースラインもディセンダーラインもどちらもよし悪し。下を選んだのは自分の好み。
    f,t: どちらもディセンダのある字ではないのでデータシートの方が自然。
    v,x,y: 実物はどう見てもミス。
    w: (セグメントの形からして左には寄せられないので)右に寄せるか両側に開くかの2択になるが、w単体では右寄せもよいがVvを左に寄せるならwだけ右寄せは不自然。逆に言えばVvを右寄せにするならwも右寄せに合わせたい。

    その他思うこと。
    数字が幅狭なのはなぜだろう。0とO、5とSの区別を付けたかった? lと1の区別は無いのに。
    他に区別の方法としては、0にスラッシュ[下図1]、5かSの左上を斜めにする[下図2]とか。5かSかどっち変えるのが自然かな…。
    nがNを小さくした形なのはだいぶ珍しい。nの形[下図3]ができないわけでも他に紛らわしい文字があるわけでもないのになぜだろう。
    〈,〉の形[下図4,5]を()にも<>にも使っていないのが不思議だ。
    'には,を上に上げた形[下図6]も作れるな。まあ縦線が長い分不自然だが。
    #が「キ」型なのはさすがに不自然では。[下図7]の形の方がいいと思う。
    22セグ_各種グリフ案
    ほとんどの文字に下線を付けることができる(gとqが区別がつかなくなる、"_"はベースラインに上げた)。何かと使えそう。
    22セグ_下線
    他に何か描けるかな。ディセンダが有効活用できるのは…ギリシャ小文字いけそうだな。試しに描いてみよう。εκχが無理か。他はそこそこ自然に描けたのに残念だ。e,k,xで代用もありか?
    22セグ_ギリシャ文字
    あとキリル小文字は…一瞬でвとかэとかщとか駄目なのが思いつく。試すまでもない。
      

  • KanaFiveの画像を用意した(ついでにちょっと字形改良)
    2018年03月23日 00:33

    以前、KanaFiveという名の5×5ドットひらがなカタカナフォントを作った。調べてみると9年前だ。うわあ。
    最初はフォント作成サービスで仮名と一部の記号だけを作っただけであった。 → 5×5 ひらがなフォント
    次にJIS記号など大幅に増やしたものを画像として作成、仮名のみだが表示システムも作成した。 → 5×5フォント改 / JavaScriptフォント表示機
    そして最終的に多くのOSで使えるTTFフォントファイルとして作成した。記事にも書いてあるがこの際字形の改良もしている。 → 5×5ドットフォント完成版

    ありがたいことに数件使われているのを見かけた。
    以前、パーラービーズに使われたものと、
    最近micro:bitという名の5×5ドットのLEDの付いたマイコンボードがあり、これに使われているのを2件見かけた。
    こちらと、「micro:bitでひらがなを表示させてみよう
    こちらだ。

    さて、使われるのはたいへん嬉しいのだが、ひとつ気にかかることがある。
    何故か使われているのが古いものなのである。
    「何故か」というか、理由は明確で、PC上で文章を打つのに使うのでなければTTFファイルをダウンロードして文字を打つより画像から描き写す方が楽だからであろう。
    どれを使っても構わなくはあるのだが、自分としては上記の通り字形の改良をして最終版のTTFが最も優れているつもりなので、できればこれを使ってほしい。
    ということで今更ながら当該記事に最新版の画像も置くことにした。

    …のだが、困ったことに、その画像を作っている最中にも字形に気に入らないところが出てきて更に修正を加えることになってしまった。
    変更した文字は「あさでにむりるろわク」の10字、うち「あ」は結局初期のものに戻したものだ。ついでに「𛀀」「𛀁」を描いた気がしていたが描いていなかったので描いた。
    KanaFive_差分
    TTFの方も更新したいのだが、TTFを作成するにはまず今のPCにはFontForgeが入っていなかった気がするので確認して無かったら入れ、使い方を思い出し、当時散々悩まされた一部の文字が消える不具合とまた闘わなければならない。大変気が重い。
    というわけで残念ながら現在の最新版は仮名のみ画像である。仮名以外はTTF版が最新である。

    こちらにも貼っておこう。
    等倍画像と、
    KanaFive画像
    4倍の画像と、
    KanaFive画像_×4
    プログラムで使う用に置換しやすい感じのテキスト。
    ひらがな清音
    _@___
    @@@_@
    _@_@_
    @_@_@
    @@__@
    -----
    @__@_
    @___@
    @___@
    @_@_@
    _@___
    -----
    _@@__
    @@@@_
    ____@
    ____@
    _@@@_
    -----
    _@@__
    @@@@@
    ___@_
    _@@__
    @__@@
    -----
    _@___
    @@@_@
    _@___
    @@@@_
    @@__@
    -----
    _@_@_
    @@@_@
    _@_@_
    _@_@_
    @__@_
    -----
    @@@@_
    _@@@@
    ___@_
    @____
    _@@@_
    -----
    __@@_
    _@___
    @____
    _@___
    __@@_
    -----
    @__@_
    @_@@@
    @__@_
    @__@_
    @__@_
    -----
    _@@@_
    ___@_
    _____
    @____
    _@@@@
    -----
    __@__
    @@@@@
    ___@_
    @____
    _@@@@
    -----
    @____
    @____
    @____
    @___@
    _@@@_
    -----
    ___@_
    @@@@@
    _@_@_
    __@@_
    ___@_
    -----
    _@_@_
    @@@@@
    _@_@_
    _@___
    __@@_
    -----
    _@__@
    ___@_
    @@@@@
    _@___
    __@@@
    -----
    _@___
    @@@__
    _@_@@
    @____
    @_@@@
    -----
    _@___
    @@@@@
    _@@@_
    ____@
    _@@@_
    -----
    @@@@_
    ____@
    ____@
    ____@
    __@@_
    -----
    @@@@@
    ___@_
    __@__
    __@__
    ___@@
    -----
    @__@_
    @_@__
    _@___
    @____
    _@@@@
    -----
    _@___
    @@_@@
    ___@_
    _@@@@
    _@@@_
    -----
    @_@@@
    @____
    @____
    @_@__
    @__@@
    -----
    @___@
    _@@@_
    @_@_@
    @@_@@
    ___@@
    -----
    _@___
    @@@@_
    _@__@
    @@_@@
    _@_@@
    -----
    _@@@_
    @_@_@
    @_@_@
    @_@_@
    _@@__
    -----
    @__@_
    @_@@@
    @__@_
    @_@@@
    @_@@_
    -----
    @@___
    _@_@@
    @__@_
    @__@_
    _@@__
    -----
    _@@__
    _____
    __@__
    @_@_@
    @_@_@
    -----
    _____
    _@@__
    @__@_
    ____@
    _____
    -----
    @_@@@
    @__@_
    @_@@@
    @__@_
    @_@@@
    -----
    @@@@@
    _@@@_
    __@__
    @@@@_
    @@@_@
    -----
    @@___
    _@_@_
    _@@@@
    @@_@_
    @@_@_
    -----
    _@___
    @@@_@
    _@___
    @@__@
    _@@@_
    -----
    @___@
    _@@@_
    @@_@@
    @_@_@
    @@__@
    -----
    @@@__
    _@___
    @@@__
    _@__@
    __@@_
    -----
    _@__@
    @@@@_
    _@__@
    _@___
    _@___
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    @_@__
    @@@@_
    @_@_@
    @_@_@
    @_@@_
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    __@__
    __@@@
    __@__
    @@@@_
    @@@_@
    -----
    @_@@_
    @____
    @@@@_
    ____@
    @@@@_
    -----
    @___@
    @___@
    @@__@
    ____@
    __@@_
    -----
    @@@@@
    __@@_
    ____@
    @@__@
    @@@@_
    -----
    _@___
    @@@@_
    _@_@_
    @@_@_
    _@_@@
    -----
    @@@@@
    __@@_
    ____@
    @___@
    _@@@_
    -----
    _@_@_
    @@@_@
    _@__@
    @@__@
    _@_@_
    -----
    @@___
    _@@@_
    @@__@
    @@_@@
    @@_@@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _@@@_
    ___@_
    _@@_@
    _@@@_
    @_@_@
    -----
    _@@__
    @@__@
    __@@_
    _@_@_
    _@@@@
    -----
    _@___
    _@___
    @____
    @@__@
    @_@@_
    -----
    @_@__
    @_@__
    _____
    _____
    _____
    -----
    @@___
    @@___
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    ひらがな特殊
    _____
    _@___
    @@@_@
    _@_@_
    @@@_@
    -----
    _____
    @__@_
    @___@
    @___@
    _@___
    -----
    _____
    _@@__
    @@@@_
    ____@
    _@@@_
    -----
    _____
    _@@__
    @@@@@
    __@__
    @@_@@
    -----
    _____
    _@__@
    @@@__
    _@@@@
    @@@_@
    -----
    __@_@
    _@_@_
    @@@__
    _@_@_
    @__@_
    -----
    @@@_@
    @@@@_
    __@__
    @____
    _@@@_
    -----
    __@_@
    _@___
    @____
    _@___
    __@@_
    -----
    ____@
    @__@_
    @_@@@
    @__@_
    @__@_
    -----
    @@@_@
    __@__
    _____
    @____
    _@@@_
    -----
    _@__@
    @@@@_
    __@__
    @____
    _@@@_
    -----
    @__@@
    @____
    @____
    @___@
    _@@@_
    -----
    __@_@
    @@@@_
    @_@__
    _@@__
    __@__
    -----
    @_@_@
    @@@@_
    @_@__
    @____
    _@@__
    -----
    @_@_@
    __@__
    @@@@_
    _@___
    __@@_
    -----
    _@__@
    @@@__
    _@_@@
    @____
    @_@@@
    -----
    _@__@
    @@@@_
    _@@__
    ___@_
    _@@__
    -----
    ____@
    @@@@_
    ____@
    ____@
    __@@_
    -----
    @@@@@
    ___@_
    __@_@
    __@__
    ___@_
    -----
    @___@
    @_@__
    _@___
    @____
    _@@@@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    @@@__
    ___@_
    __@__
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    @___@
    @_@@_
    @__@_
    @_@@@
    @_@@_
    -----
    @@__@
    _@___
    @__@@
    @__@_
    _@@__
    -----
    _@@_@
    _____
    __@__
    @_@_@
    @_@_@
    -----
    ____@
    _@@__
    @__@_
    ____@
    _____
    -----
    @_@_@
    @__@_
    @_@@@
    @__@_
    @_@@@
    -----
    @__@@
    @_@@@
    @__@_
    @_@@@
    @_@@_
    -----
    @@_@@
    _@_@@
    @____
    @__@@
    _@@__
    -----
    _@_@@
    ___@@
    __@__
    @_@_@
    @_@_@
    -----
    ___@@
    ___@@
    _@@__
    @__@_
    ____@
    -----
    @_@@@
    @__@@
    @_@@_
    @__@_
    @_@@@
    -----
    _____
    _@__@
    @@@@_
    _@__@
    _@___
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    @_@__
    @@@@_
    @_@_@
    @_@_@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    __@__
    __@@@
    @@@__
    @@@@_
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _@@_@
    @@@__
    ___@_
    ___@_
    _@@__
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _@_@_
    @@@_@
    _@__@
    @@__@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _@___
    __@__
    ___@_
    __@__
    -----
    ___@@
    _@___
    __@__
    ___@_
    __@__
    -----
    カタカナ清音
    @@@@@
    __@_@
    __@@_
    __@__
    _@___
    -----
    ____@
    __@@_
    @@@__
    __@__
    __@__
    -----
    __@__
    @@@@@
    @___@
    ____@
    _@@@_
    -----
    _@@@_
    __@__
    __@__
    __@__
    @@@@@
    -----
    ___@_
    @@@@@
    __@@_
    _@_@_
    @__@_
    -----
    _@___
    @@@@@
    _@__@
    _@__@
    @__@@
    -----
    __@__
    @@@@@
    __@__
    @@@@@
    __@__
    -----
    _@@@@
    _@__@
    @___@
    ____@
    __@@_
    -----
    _@___
    _@@@@
    @__@_
    ___@_
    _@@__
    -----
    @@@@@
    ____@
    ____@
    ____@
    @@@@@
    -----
    _@_@_
    @@@@@
    _@_@_
    ___@_
    __@__
    -----
    @@___
    _____
    @@__@
    ___@_
    @@@__
    -----
    @@@@_
    ___@_
    __@__
    _@_@_
    @___@
    -----
    _@___
    @@@@@
    _@__@
    _@___
    __@@@
    -----
    @___@
    _@__@
    ____@
    ___@_
    _@@__
    -----
    _@@@@
    _@__@
    @_@@@
    ____@
    _@@@_
    -----
    _@@@_
    __@__
    @@@@@
    __@__
    _@___
    -----
    @_@_@
    @_@_@
    ____@
    ___@_
    _@@__
    -----
    _@@@_
    _____
    @@@@@
    __@__
    __@__
    -----
    @____
    @____
    @@@__
    @__@@
    @____
    -----
    __@__
    @@@@@
    __@__
    __@__
    _@___
    -----
    _@@@_
    _____
    _____
    _____
    @@@@@
    -----
    @@@@@
    ____@
    _@_@_
    __@__
    @@_@@
    -----
    __@__
    @@@@@
    ____@
    _@@@_
    @_@_@
    -----
    ___@_
    ___@_
    ___@_
    __@__
    _@___
    -----
    __@__
    ___@_
    @___@
    @___@
    @___@
    -----
    @____
    @@@@@
    @____
    @____
    _@@@@
    -----
    @@@@@
    ____@
    ____@
    ___@_
    _@@__
    -----
    _____
    _@___
    @_@__
    ___@_
    ____@
    -----
    __@__
    @@@@@
    __@__
    @_@_@
    @_@_@
    -----
    @@@@@
    ____@
    _@_@_
    __@__
    ___@_
    -----
    @@@@_
    _____
    _@@@_
    _____
    _@@@@
    -----
    __@__
    _@___
    @____
    @___@
    @@@@@
    -----
    ____@
    __@_@
    ___@_
    __@_@
    @@___
    -----
    @@@@_
    _@___
    @@@@_
    _@___
    __@@@
    -----
    _@___
    @@@@@
    _@__@
    _@___
    _@___
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    @@@@_
    ___@_
    ___@_
    ___@_
    @@@@@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    @@@@@
    ____@
    _@@@@
    ____@
    @@@@@
    -----
    _@@@_
    _____
    @@@@@
    ____@
    _@@@_
    -----
    _@__@
    _@__@
    _@__@
    ____@
    __@@_
    -----
    __@__
    @_@__
    @_@_@
    @_@_@
    @_@@_
    -----
    @____
    @____
    @___@
    @__@_
    @@@__
    -----
    @@@@@
    @___@
    @___@
    @___@
    @@@@@
    -----
    @@@@@
    @___@
    ____@
    ____@
    _@@@_
    -----
    ___@_
    @@@@@
    _@_@_
    @@@@@
    ___@_
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    @@@@@
    __@_@
    __@@_
    __@__
    @@@@@
    -----
    @@@@@
    ____@
    @@@@@
    ____@
    __@@_
    -----
    @@___
    _____
    ____@
    ___@_
    @@@__
    -----
    _____
    @____
    _@@@@
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    カタカナ特殊
    _____
    @@@@@
    __@_@
    __@@_
    _@___
    -----
    _____
    ____@
    @@@@_
    __@__
    __@__
    -----
    _____
    __@__
    @@@@@
    @___@
    __@@_
    -----
    _____
    _@@@_
    __@__
    __@__
    @@@@@
    -----
    _____
    ___@_
    @@@@@
    _@_@_
    @__@_
    -----
    _@_@@
    @@@@_
    _@_@_
    _@_@_
    @__@_
    -----
    _@_@@
    @@@@_
    _@___
    @@@@_
    _@___
    -----
    ___@@
    _@@@_
    @__@_
    ___@_
    _@@__
    -----
    _@_@@
    _@@@_
    @_@__
    __@__
    _@___
    -----
    ___@@
    @@@@_
    ___@_
    ___@_
    @@@@_
    -----
    @_@_@
    @@@@_
    @_@__
    __@__
    _@___
    -----
    @@_@@
    _____
    @@__@
    ___@_
    @@@__
    -----
    ___@@
    @@@@_
    ___@_
    __@__
    @@_@_
    -----
    _@_@@
    @@@@_
    _@_@_
    _@___
    __@@_
    -----
    @__@@
    _@_@_
    ___@_
    __@__
    _@___
    -----
    ___@@
    _@@@_
    @__@_
    __@@_
    _@@__
    -----
    @@@_@
    _@___
    @@@@_
    _@___
    @____
    -----
    ___@@
    @_@__
    @_@_@
    ____@
    _@@@_
    -----
    _@@_@
    _____
    @@@@@
    __@__
    _@___
    -----
    @__@@
    @____
    @@@__
    @__@@
    @____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    @_@_@
    @_@_@
    ____@
    _@@@_
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    ___@@
    __@__
    @__@_
    @___@
    @___@
    -----
    @__@@
    @@@@_
    @____
    @____
    _@@@@
    -----
    ___@@
    @@@@_
    ___@_
    ___@_
    _@@__
    -----
    ___@@
    _@___
    @_@__
    ___@_
    ____@
    -----
    __@_@
    @@@@_
    __@__
    @_@_@
    @_@_@
    -----
    ___@@
    ___@@
    @_@__
    @__@_
    @___@
    -----
    @__@@
    @@@@@
    @____
    @____
    _@@@@
    -----
    ___@@
    @@@@@
    ___@_
    ___@_
    _@@__
    -----
    ___@@
    _@_@@
    @_@__
    ___@_
    ____@
    -----
    ___@@
    @@@@@
    __@__
    @_@_@
    @_@_@
    -----
    _____
    _@___
    @@@@@
    _@__@
    _@___
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    @@@@_
    ___@_
    ___@_
    @@@@@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    @@@@@
    _@@@@
    ____@
    @@@@@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    ____@
    @@@@@
    @___@
    ____@
    __@@_
    -----
    ___@@
    @@@@_
    _@_@_
    @@@@@
    ___@_
    -----
    __@_@
    @@@@@
    @___@
    ____@
    __@@_
    -----
    ___@@
    @@@@_
    _@_@_
    _@___
    @@@@@
    -----
    ___@@
    @@@@_
    ___@_
    @@@@_
    ___@_
    -----
    _____
    @@@@@
    @___@
    ____@
    __@@_
    -----
    _____
    _@___
    @@@@_
    _@_@_
    _@_@_
    -----
    _____
    _@___
    _@@@_
    @_@__
    __@__
    -----
    _____
    _@___
    __@__
    ___@_
    _____
    -----
    ___@@
    _@___
    __@__
    ___@_
    _____
    -----
    その他仮名
    _____
    _@__@
    @@@_@
    _@_@_
    @__@_
    -----
    _____
    @__@_
    @_@@@
    @__@_
    @__@_
    -----
    __@@@
    __@__
    _@_@_
    ____@
    __@@_
    -----
    _@@@_
    ___@_
    ___@_
    ___@_
    ___@_
    -----
    __@__
    @@@@@
    ____@
    ___@_
    _@@__
    -----
    @_@@_
    ____@
    @___@
    @__@_
    @_@@@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    ___@@
    _@_@@
    @@@_@
    _@_@_
    @__@_
    -----
    _@_@@
    @@@@@
    _@@@_
    @____
    _@@@_
    -----
    __@@@
    _@_@@
    @____
    _@___
    __@@_
    -----
    ___@@
    @__@@
    @_@@_
    @__@_
    @__@_
    -----
    ___@@
    _@@@@
    ___@_
    @____
    _@@@_
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _@@@@
    _@__@
    @___@
    __@@_
    -----
    _____
    @@___
    ____@
    @@_@_
    @@@__
    -----
    _____
    @@@@@
    ___@_
    __@__
    @@_@@
    -----
    _____
    @____
    @____
    @@@@@
    @____
    -----
    _____
    @@@@@
    _@__@
    __@@_
    @@__@
    -----
    _____
    __@__
    ___@_
    @___@
    @___@
    -----
    _____
    @____
    @@@@@
    @____
    _@@@@
    -----
    _____
    @@@@@
    ____@
    ___@_
    _@@__
    -----
    _____
    _____
    _@@__
    @__@_
    ____@
    -----
    _____
    __@__
    @@@@@
    __@__
    @_@_@
    -----
    _____
    _@___
    @____
    @___@
    @@@@@
    -----
    _____
    _@@@_
    @@@@@
    ____@
    __@@_
    -----
    _____
    _@__@
    _@__@
    ____@
    ___@_
    -----
    _____
    __@__
    @_@__
    @_@_@
    @_@@_
    -----
    _____
    @____
    @___@
    @__@_
    @@@__
    -----
    _____
    @@@@@
    @___@
    @___@
    @@@@@
    -----
    _____
    ___@@
    @@@@@
    ___@_
    _@@__
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    ___@@
    _@_@@
    @@@@_
    _@_@_
    @__@_
    -----
    _@_@@
    @@@@@
    _@___
    @@@@_
    _@___
    -----
    ___@@
    _@@@@
    @__@_
    ___@_
    __@__
    -----
    ___@@
    _@_@@
    _@@@_
    @_@__
    __@__
    -----
    ___@@
    @@@@@
    ___@_
    ___@_
    @@@@_
    -----
    @__@@
    @@@@@
    @_@__
    @____
    _@@__
    -----
    ___@@
    @_@@@
    @_@_@
    ____@
    __@@_
    -----
    @__@@
    @__@@
    @@@__
    @__@@
    @____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____


    (2018/12/29追記)
    ライセンスはパブリックドメインとします。
    どんな用途にもご自由にお使いください。
    なお必須ではありませんが報告・クレジット表示あると私が喜びます。  

  • 最近のWindowsのビットマップフォントの太字
    2017年01月09日 18:49

    MSゴシックのようなウェイト(太さ)が1種類しかないビットマップフォントをテキストエディタやHTMLなどで太字指定すると、自動生成された太字が表示される。
    単純な太字化アルゴリズムとして古くから用いられているのが横方向に1px太らせる手法で、WindowsでもXPまで長らく使われていた。
    単純な太字
    この手法の問題点は、1pxの隙間を開けて縦線が並んでいる箇所で隙間がつぶれてしまうことだ。
    「棚」「鵬」などの縦線の多い字を小サイズで表示すると黒い塊になってしまう。
    隙間が潰れる

    このつぶれを避ける改良版のアルゴリズムとして、「横に1px太らせてつぶれるなら、太らせない」というものがある。
    スーパーの太字
    なお、右に太らすか左に太らすかで2種類存在する。
    スーパーの商品の値札の文字や、Javaで作られたGUIの文字表示に使われているのをよく見かける。
    最初にこれに気づいたのがスーパーの値札だったので、自分の中でこれは「スーパーの太字化アルゴリズム」と認識されている。
    これを最初に見かけた時は画期的だと感心したものだが、これにも欠点はあって、元々連続的な線であったところが太くなるところとならないところが混在すると形状が乱れて文字が読みにくくなってしまう。
    スーパーの太字_乱れ
    図の赤で示したあたりが不自然な形状になっている。

    そして本題の最近のWindowsの太字だ。これが更に画期的なのである。
    最近のWindowsの太字
    これは最初に気づいたのがWindows7のインストール画面で、Windows7で始めて実装されたものと思っていたのだが、確認してみるとVistaでも使われていた。
    Vistaにも最初からあったのに気づいていなかったのか、それともアップデートで実装されたのか分からない。ともかく、XPまでは無く、7からはある。
    この手法の特徴は見て分かるように白黒2値でなく中間調の灰色を使っている点だ。
    単純な太字化で問題ないところでは黒で横に1px太らせ、単純にはつぶれてしまうところでは灰色で太らせる。
    ここでスーパーのアルゴリズムと異なり、縦に連続する黒ピクセルは常に同じ色で太らせる。これにより形状が乱れることを防げている。

    しかしこのアルゴリズムは思った以上に複雑で色々とわからない点がある。
    Windows太字の不明点
    ・黒にするか灰色にするかの判断
    単純に太らせると別の点に接触する場合は灰色なのかと思いきや、そうでない場合がある。例えば「棚」の赤で示した木偏の縦線は下2pxが隣の月に接触しているが構わず黒で太らせている。

    ・灰色の濃さ
    接触する点が多いほど薄くなっている傾向は分かるのだが、細かく見るとそう単純ではない。
    「鵬」の月の中と、月と月の間は両方とも100%接触なのだが色が違う。率だけでなく、ドット数や分断の有無で変わるのだろうか。
    「繭」の一番左の灰色は、5ドット中4ドット接触だが、100%接触の鵬のドットより色が薄い。

    ・ひとつづきに扱う範囲
    「繭」の赤で示したドットは、真ん中と下は横線で隔てられているが同じ色で太っている。また上は白ドットで隔てられていて違う色で太っている。
    白ドットで隔てられた時は別扱いかと思いきや、青で示したドットは同じ色で太っている。(ともに100%接触だが、ドット数が違えば色は変わるものと思われる)

    そんなわけで詳しいアルゴリズムがずっと気になっているのだが、不思議な事にこのアルゴリズムについてネット上で情報を見かけない。Windows7当時から探しているのだが、本当に1つも見つからない。
    何か情報があればぜひ教えて欲しい。  

  • 漢点字一覧表
    2015年04月26日 02:24

    ASCII-7セグメント対応
    2014年12月30日 01:03

    以前7セグ英字表記を作ったが、今回さらに7セグで全ASCII文字(ただしアルファベットの全半角の区別を除く)を考えてみた。
    ASCIIと7セグの対応で最も難しいのは括弧類である。
    括弧類は(),[],{},<>の4種類あり、さらに"C"を加えると似たような形の5種類を区別しなければならない。
    以前から何度か7セグASCIIには挑戦したことがあったが、この5種類をひねり出すことがどうしてもできなかった。
    これを今回、区別のために1つセグメントを追加することで一意に対応付けることができた。英字のときmとn、uとvの区別のために使った手法である。<>がセグメントを追加されている。
    括弧類
    他は、読めるかといえば微妙なものもあるが、一意に対応付けること自体はさほど難しくなかった。
    完成したものがこちらである。
    7セグASCII対応
    「┤」「├」の形を{}に使ってしまったために「+」が完全に余り物になってしまったのと、どうしようもなくて諦めた「&」が読めない筆頭である。他は面影はあると思うので説明は省略する。
    英字部分は基本的に前回のものを踏襲したが、Cは括弧との兼ね合いで小文字に、Wは#に取られて形を変更している。
    英字部分変更点

    余談
    1セグメントのみの表示は7つ全て文字に対応している。何かと便利かもしれない。
    単独セグメント

    7セグメントに加えドットも使うならこういうのもありか。
    ドット付きの場合
    また、ドットを使うなら大文字フラグとして使ってASCIIの全文字を区別可能にするのもよいだろう。

    あと何かに使いたい人のためにビット表示。左からABCDEFGセグメント。
    【 !"#$%&'()*+,-./】
    0000000
    0101000
    0100010
    0111111
    1011010
    0010010
    0011110
    0000010
    1000011
    1100001
    1100011
    0010001
    0011000
    0000001
    0000100
    0100101
    【0123456789】
    1111110
    0110000
    1101101
    1111001
    0110011
    1011011
    1011111
    1110000
    1111111
    1111011
    【:;<=>?】
    1000001
    1000101
    1001101
    1001000
    1011001
    1101001
    【@】
    1111101
    【AbcdEFGHiJKLmnoPQrStuvWXYZ】
    1110111
    0011111
    0001101
    0111101
    1001111
    1000111
    1011110
    0010111
    0010000
    0111100
    1010111
    0001110
    1010101
    0010101
    0011101
    1100111
    1101011
    0000101
    0011011
    0001111
    0011100
    1011100
    0101010
    1001001
    0111011
    1101100
    【[\]^_】
    1001110
    0010011
    1111000
    1100010
    0001000
    【`】
    0100000
    【{|}~】
    0110001
    0000110
    0000111
    1000000
      

  • 7セグ英字表記
    2014年09月23日 01:06

    ※この記事には画像にsvgを使っています。最近のブラウザなら大丈夫だと思いますが、
    ←これ
    が見えない人はもっと新しいブラウザを使ってください。

    7セグメントディスプレイは主に数字を表示するものだが、頑張れば英字も表示できる。
    (さらに頑張ればカタカナも…って言ったらみんなから読めないって言われた…)

    英字のグリフ(字形)の例はWikipedia英語版のSeven-segment display character representationsに大量に載っているが、解説が無くまとまっていないので、自分なりに解説を付けてみた。
    なお、Wikipediaに載っている1文字のものの内、∀などの英字でないと思われるものは除いた。
    以下に登場するグリフはこのWikipediaの記事のものに加え、10年くらい前に読んだフォントデザインの本に載っていたものを思い出して描いたものもある。

    見ていくにあたって、まずグリフに求められる事項をまとめよう。
    ・他のアルファベットや数字と形がかぶらないこと
    ・そのアルファベットに見えること
    ・別のアルファベットに見えないこと

    また、見栄えを考えると大文字に統一されていることが望ましい。
    実際にすべて統一するのは不可能だが、26文字全ては無理でも特定の単語を書く時に使う分だけでも意味はあるだろう。

    といったところでAから順に見ていく。

    【A】
    大文字がと無理なく描けるのでこれで決まりだろう。
    小文字のもあるが、小文字なのに高さがあって不自然である。またこの形は「@」として使われることもある。
    かなり無理やり小文字の高さにしているは「a」に見えないが、後述のようにアクセントを付けるのに使えるかもしれない。
    【B】
    大文字を素直に描くととなり「8」と同形になってしまう。
    小文字でが無理なく描けるのでこれを使うのが一般的だ。6の字形の一種とかぶるが、6はの方を使うことにして回避するのが一般的。
    は縦棒を抜いた形か。面白いが「3」とかぶるのは問題だ。はキリル文字の「Б」か? はよく分からない。
    【C】
    大文字で、小文字で。どちらも無理がない。他には思いつかないと見える。
    【D】
    Bと同様、大文字を素直に描くととなり「0」・「O」と同形になってしまう。
    こちらも小文字にするとと無理なく描ける。
    は「∂」や「ð」の形か。は上のBと同じく縦棒を抜いた形、は縦棒を半分だけ抜いた形だろう。Bと違って他とかぶらないのでこれは大文字に統一したい時使えるかもしれない。はよく分からない。
    【E】
    大文字がと無理なく描ける。
    小文字のもあるが「a」と同じく高さが不自然。
    は「a」と同様に高さを合わせたものだろう。こちらもあまり「e」には見えない。
    【F】
    大文字がと無理なく描ける。小文字にするとしてもこの形だろう。
    他、 とあるが、どれもよく分からない。
    【G】
    大文字がと描ける。多少「G」らしい角張りに欠けるが、問題なく読める。
    他にはは小文字と思われるが「9」とかぶる。
    はたぶん大文字の縦線を伸ばした形、つまりこういうこと
    G
    だろうが、あまり「G」に見えない。
    は角張らせた形だが、「6」とかぶる。はよく分からない。
    【H】
    大文字がと無理なく描ける…と思いきや、実はそうするとXに困る。
    小文字もと無理なく描けるのが救い。全英字を一意にしたいならこちらを使うべきだろう。
    一意性より見栄えのほうが重要なら、大文字に統一するためを使うのも良いだろう。
    【I】
    大文字は普通に描くとになるがこれは「1」とかぶる。そのためあえて左にずらしたや、小文字にしてが良いだろう。
    は小文字で筆記体風に右へ曲げた形か。あまり必要性を感じない。小文字で律儀に点をつけたもあるが、あまり読みやすいとは思えない。トルコ語の点付きİのためのものだろうか。 はよく分からない。
    【J】
    大文字で。好みの問題だろう。上のセリフを付けたもあるが、必要を感じない。
    小文字では点の有無とセリフのバリエーションで 。あまり小文字の必要を感じない。
    はよく分からない。
    【K】
    さあ最初の難関だ。
    2本の斜線を上下にずらしてとするのが順当か。両側にずらすとと、「C」と同形になってしまう。はそれぞれ左半分と右半分を取った形だろうか。
    小文字でもあるが、この形は「t」に使いたいところ。
    はさすがに「H」と「X」を差し置いてKに使うという選択肢は無いだろう。他、 はよく分からない。
    【L】
    大文字がと無理なく描けるので他に必要を感じない。
    は小文字だろう。も一応小文字? はセリフを付けたのだろうが、必要を感じない。はよく分からない。
    【M】
    非常に難しい。素直に描くとどうやってもNと同じになってしまう。
    のように「n」に区別のための+αのセグメントをつけた形か、部分を取ったの形か。横向きにしたも考えられるがいかんせん3とEで使われている。
    Nは小文字を使うことにして大きさで区別したはなかなか良いと思う。
    はよく分からない。
    【N】
    Mとの区別を考えると小文字のが安定だろう。
    大文字化したもMに使っていないなら良いだろう。大文字「N」を小文字「n」の形につくるフォントはよくある。
    は左に45°傾けた形だろう。はなんとなく「N」の点対称感は出ているが「S」に見える。は斜め線を描くのを諦めた形だろう。はよくわからない。
    【O】
    大文字だと。「0」と区別がつかない。
    区別をつけるなら小文字でが良いだろう。
    【P】
    大文字がと無理なく描ける。小文字にするとしてもこの形だろう。他に必要を感じない。
    はなぜ1本取ったのかよく分からない。
    【Q】
    なかなかの難関である。
    。小文字であろう。ただ高さがあっていないのと「9」に見えるのが残念な所。
    。大文字で下に波線がうにょ~んと付くタイプだろう。こういうやつ。
    Q
    あまりQに見えないが、他のものにもあまり見えない。
    。こちらは棒が離れているタイプか。こちらもあまりQに見えない。とどちらを選ぶかは好みの問題だろう。はどう見ても「O」でしかない。はよく分からない。
    【R】
    小文字がとわりと無理なく描けるのでこの形が一般的。
    は小文字を大文字化したものだろう。「n」の大文字化と違いあまり使われない表記だと思う。
    は斜め線を下にずらした形、 は一部をとった形だろう。大文字が欲しければこの辺から選ぶことになる。が気に入った。
    【S】
    大文字を普通に描くととなり「5」と区別がつかない。
    区別をつけるために一部を変形させた形が は、サイバーな雰囲気のフォントでこのような形に作るものを見かける。こんなの。
    S
    はLong S「ſ」だろう。他、 はよく分からない。
    【T】
    小文字の「t」を象ったが一般的。下を曲げないも良い。
    他に大文字の片側を取ったもある。逆のは「7」と区別がつかない。
    はセリフを付けて縦棒を除いた形か。なかなか面白いが「T」に見えるかというとかなりつらい。
    【U】
    大文字が、小文字が
    これ以外に考えられないのだが、Vとどう区別をつけるかが難しい。
    【V】
    素直に描くと、Uと同じく大文字が、小文字が
    大小文字でUと分けるか。そうするとしてどちらをどちらにするか。非常に難しい。英語でUとVが区別がつかなくてもさほど問題がないのが救いか。
    他に一部をとった 、傾けたがあるがどれもあまり「V」に見えない。
    自分でも考えてみると、「u」に区別のためのセグメントを加えた がありえる。Wにも使えるが、Wは選択肢が多いのでどうとでもなるだろう。
    あとはNew Alphabetを参考にはどうだろう…と思ったが思いっきりJとかぶっている。Jはにするという選択肢も無くはないが。
    選択肢は多いようでいてどれもパッとしない。隠れた難関である。
    【W】
    Mを逆転した と、Uになってしまうは使えないが代わりに1本加えたがある。
    横にしたは「3」とかぶるので無いだろう。はよく分からない。
    Mと同じくあまり「W」に見える形がないが、がわりと他に見えないので有力である。
    【X】
    Hで言ったとおり、がどう見てもHなのが問題である。
    は片方の線だけにした形か。あまり「X」に見えない。
    Xではなくギリシャ文字で対応するΞを象ったを使ってしまうというのも手である。
    無理やり考えれば、セリフを付けてゴシック風に中央に横線を引いた形
    X
    からの派生と考えられなくもない。
    他、 は上下対称でなくあまり「X」に見えない。 はよく分からない。
    【Y】
    がよく用いられる。これは一応字形としては小文字だが、高さが大文字なので大文字に混じっても違和感がない。大文字をこの形につくるフォントもある。
    はなかなか面白い。左右対称を重視した形か。
    は「Y」に見えなくはないもののあえてでなくこちらを使う意義は感じない。はよく分からない。
    【Z】
    素直に描くととなり「2」とかぶる。
    区別をつけるために一部を変形させた形が
    はよく分からない。

    ・まとめ
    以上を元に26文字のセットを選び出してみよう。

    かぶりを気にせず極力大文字を使おうとするとこんなところか。

    英字間でのかぶりはH/X、N/M、U/Vの3組。この程度なら案外使い物になるかもしれない。
    数字とのかぶりはB/6、O/0、S/5、Z/2。数字と混ぜて使うのは厳しそうだ。

    極力小文字を使おうとするとかなり無理があった。

    読めないのがa、e、x。かぶりがk/t、m/n、u/v/w。高さが大文字になってしまっているのがg、p、q、s、y、z。
    これは使い物にならなそうだ。

    最後に、かぶり無く、極力他の文字に読めないことを重視して選んでみた。

    MとVは区別のための線を追加する方式で、XはΞで代用した。
    これが自分の考える最良なのだが、どうだろうか。

    おまけでアクセント付き文字も考えてみた。母音字のみに限れば下半分で表現できなくもないので上に1セグメント乗せて、
    とできる。は「V」とかぶっているが文脈で。
    なおアクセントといっても色々な種類があるのに1種類だけかと思うだろうが、点字でも日本語点字のアルファベットには「アクセント符」が1つだけあってあらゆるアクセントをそれで表現する。それでも十分価値があるということだろう。
    あとはは「M」とかぶってしまったが「ñ」としても使える。

    ---09/25編集
    SVGに「shape-rendering="crispEdges"」を加えました。これによりFirefoxなど対応ブラウザではSVGの線がボケなくなったはずです。
    ただし拡大すると線の太さが不均一で醜くなるのが欠点です。
    ついでにviewbox="-2,-1,18,28"って書いていたのをどうもスペース区切りが正しかったようなのでviewbox="-2 -1 18 28"に直しました。  

  • Macをクラッシュさせてるのは「アラビア語の文字列」じゃない
    2013年09月04日 00:57

    どうでもいい事ながら、なんか気になったので。

    問題は2点ある。
    よりどうでもいい方から言うと、アラビア文字はアラビア語だけに使われているわけではなくペルシャ語とかウルドゥー語とかにも使われる。
    件の文字列を「アラビア語の文字列」だというのなら、「ABCDEFGHI」のようなものは「ラテン語の文字列」と呼ぶべきだろう。
    言語と文字の名前はきちんと区別してほしい。

    そして件の文字列はパッと見アラビア文字が目立つが、アラビア文字以外に
    U+0337: COMBINING SHORT SOLIDUS OVERLAY
    U+0334: COMBINING TILDE OVERLAY
    U+0310: COMBINING CANDRABINDU
    の3種の結合文字が重ねて配置されており、今回のクラッシュを引き起こすのに重要な役割を果たしていることは間違いないだろう。それを無視しては問題の本質を見誤ってしまい危険である。
    例えばヘブライ文字で同じ問題が起こった時、「アラビア文字じゃないから大丈夫だと思った」などということにならないか心配である。