[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/01/28(Sun) 11:43
投稿者名:kuma
Eメール:
URL :
タイトル:
文字を押しつぶした形にするには?
VB6です。
PictureBoxにフリーフォントの文字を書き込みフォントデータを取得しようとしています。
このデータを使って16x16のLEDマトリクスに文字を表示させるためです。

データを取得する方法はPixel単位でPictureBox内を16X、16Yでチェックしています。
ところがこのフォントは16x16で作られているのですが
文字の左側の縦1列のみが空になっています。
横書きにするときは、この空の1列が文字の区切りとなってOKです。

ところが縦書きにするときは(フォントの上か下の1行が空になっていないので)
文字どうしがくっついてしまいます。
PictureBoxに書き込むフォントサイズを小さくすれば、問題はありませんが。
文字は大きいままで縦書きしたとき区切りの1行がほしいのです。

フォントが左側1列、上1行を空にして15x15で作成されていれば理想なのです。
(こんなフリーフォントはあるのでしょうか?)
3種類ほどフリーフォントをインストールしてみましたが、みな同じでした。

そこで、苦肉の策として
何とかVBで文字を押しつぶした形にして上下方向の1行を空にできないかと
考えました。
色々試してみましたがダメでした。
もし可能でしたら教えてください。

投稿時間:2007/01/28(Sun) 15:35
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 文字を押しつぶした形にするには?
> フォントが左側1列、上1行を空にして15x15で作成されていれば理想なのです。

Win32 API の CreateFont 関数について調べて見て下さい。
参考図  http://bbs5.aimix-z.com/photovw.cgi?room=vbrescue&image=158.gif

因みに奇数のピクセル数で描くと小さくなります(18 ピクセル = 19 ピクセル)
後は、ご自分で確認して見て下さい。

投稿時間:2007/01/29(Mon) 10:21
投稿者名:kuma
Eメール:
URL :
タイトル:
Re^2: 文字を押しつぶした形にするには?
回答ありがとうございます。

> 因みに奇数のピクセル数で描くと小さくなります(18 ピクセル = 19 ピクセル)
PictureBoxのフォントの設定の「サイズ」のことでしょうか?
これがピクセル単位ではないと思いますが、
因みにサイズを12にすると文字としては正常ですが縦16ドットになります。
11にすると縦15ドットになりますが、太い線が混ざってちょっと変な文字になりました。

投稿時間:2007/01/29(Mon) 18:21
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: 文字を押しつぶした形にするには?
> 因みにサイズを12にすると文字としては正常ですが縦16ドットになります。
> 11にすると縦15ドットになりますが、太い線が混ざってちょっと変な文字になりました。

単位はキチンと書いて下さい。

>サイズを12 は 12ポイントだとすると
1ポイント= 1/72 論理インチ  1論理インチ=1,440Twip で 1024 ×768 の一般的な
画面のPCなら 15Twip=1ピクセル になります。
(実際は、Screen.TwipsPerPixelX プロパティで調べます)

従って 12ポイント=12*(1440/72)=240Twip となり(1ポイント = 20Twip)
12ポイント * 20 / 15 =16 ピクセル になり  11*20/15=14.666(14) ピクセルになります。
(実際は少し違いますが)

が、実際にPictureBoxに描画されるのは上下左右に空きの部分があるのでその辺は調べて
みないと一概にどれだけあいているかは言えないので。

参考画像  http://bbs5.aimix-z.com/photovw.cgi?room=vbrescue&image=161.gif
詳しくは、[雑談及び画像投稿用掲示板]の方をご覧下さい。

   文字ポイント  半角幅     全角幅
     9      90     180
    10     105     195
    11     120     225
    12     120     240
    14     150     285
    16     165     315
     18     180     360
    20     210     405

  幅の単位=twip
下記のプログラムを実行してみるとよく解ると思うのですが、フォントサイズは
0.75ポイント=1ピクセル 単位での設定なっております。
(10ポイント=10.5 11ポイント=11.25 になります)

Private Sub Command1_Click()
   Dim i As Single
   For i = 8 To 15 Step 0.25
      Me.FontSize = i
      Debug.Print Me.FontSize
   Next i
End Sub
逆算すれば、11.25 ポイントが 15ピクセルになります。

又、全角と半角によっても変わりまし、gとmでは表示位置が違います。

フリーのフォントでもTrurType のフォントがあると思うのですが。

ピクセル ヘルプより
ピクチャ エレメント (picture element) の省略形で、"画素" の意味です。画面上に
画像を表示するときの最小単位である "点 (ドット)" を "ピクセル (pixel)" と呼びます。
ピクセルは、マシンに依存する単位で、ディスプレイのシステムや解像度によって、
画面に表示される長さが異なります。(基本的なところで話が噛み合わないと...。)