文字の描画の文字間隔の調整その4_1/2
この記事は前回の
初めて使ってみたStructure、構造体、文字の描画の文字間隔の調整その3の上 ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
と
初めて使ってみたStructure、構造体、文字の描画の文字間隔の調整その3の下 ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
の続き
前回
ターンを字間指定0で描画
最終的なかたちとしてはこれでいいけど予定していたかたちとは違っていた
すぐ直せると思っていたけどなかなかできなくて
今回
やっとできた
目的とは外れているけど今回はこれでいい
前回の方法で「ショ」を描画
今回の方法でショ
期待通りに描けているショ
前回の方法
前回の方法では2文字目を描画する位置を求めるときに
1文字目の右端から枠までの長さ9足す
2文字目のその同じ高さの左空白の長さ22の
合計31と
2文字目の左端から枠までの長さ8足す
1文字目のその同じ高さの右空白の長さ30の
合計38
31と38を比較して小さい方の31
31左に移動したところに2文字目を描画する方法だった
結果こうなる
求める結果は
こうだった
そのためにとった今回の方法
右端や左端のピクセルだけではなく
すべての色付きピクセルのあるラインを調べて比較
同じ高さの空白の長さを合計して一番短い長さの分だけ
2文字目を左に移動させる
描画の設定は
フォント:Meiryo UI
フォントサイズ:30
Graphics.DrawStringで普通に描画
描画範囲は
Graphics.MeasureStringで取得して小数点は切り上げすると
高さは57ピクセルになる
57個全部のラインを調べる
文字がないラインは-1を入れて、それ以外の色付きピクセルがあれば
そのX座標と枠からの距離を入れる
「シ」の右側の空白の長さ一覧
「ョ」の左空白の長さ一覧
この二つの一覧を使って、両方共-1以外のラインがあれば合計した一欄を作る
合計した一覧表
この中から一番小さい数字が目的の数字になる
21
この中で一番短いのは
ここの21
「シ」の横幅は48ピクセル
座標だと0から数えるから0から47になるのがややこしいけど
「ョ」の描画位置は48-21=27になる
27に「ョ」を描画したところぴったりくっついた!
2文字以上の時も変わらない
こうなって
残る問題
「ー」の文字が難しいーの横ラインと同じ高さに次の文字がない
「一二」だと最短距離が0(無いって)判定になるから離れたままになってしまう
「十三」の場合、これもなんか違う
「ソノ人」の場合
単純で画数が少なくて似たようなかたちの文字が続くとイマイチな感じなる
「純で」のところ以外はいいなあ
Public Structure QuartetSpace上下左右の空白2
'Dim DrawRect As Rectangle
Dim OutSize As Size '外側のサイズ
Dim InSize As Size '内側のサイズ
Dim Top As Integer '一番上のピクセルのY座標
Dim Bottom As Integer
Dim Left As Integer
Dim Right As Integer
Dim TopLength As List(Of Integer)
Dim BottomLength As List(Of Integer)
Dim RightLength As List(Of Integer) '右側の空白の長さ一覧
Dim LeftLength As List(Of Integer)
Dim TopPoints As List(Of Integer)
Dim BottomPoints As List(Of Integer)
Dim RightPoints As List(Of Integer) '右側のピクセルのX座標一覧
Dim LeftPoints As List(Of Integer)
End Structure
縦書のことを考えてTopとかBottomも作るけど縦書に行く前に描き直すから意味ないなw
コードしか書いてない2ページ目↓
文字の描画の文字間隔の調整その4_2/2 ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
また記事を投稿しようと決定ボタンを押してもエラーになって投稿できない
のでまた分割記事になってしまった
前回と違って2万文字は超えていないのに!
また画像が消えるよ、貼り直しだよ、文字の位置もずれるよ
確認ボタンではしっかり表示されるのに!ヽ(`Д´)ノウワァァァン!!