WindowsのフォントスレッドVer.16

このエントリーをはてなブックマークに追加
220名無し~3.EXE
最近、フォント系のスレッドのクオリティが軒並み低下してるのはどうしたものか。

ttp://up2.viploader.net/pic/src/viploader294038.png
gdi32.dllのTextOutA/TextOutWをフックして、3倍にオーバーサンプリングして
から描画するようにしてみた。とりあえずそれをJaneに引っ掛けてみたけど、
どうしてもMacのソレよりはボヤけてしまうね。つまり、ヒンティングを無効にした状態と等しいからかも。
こんなんでブラウジングしたら目が疲れる。それでもWindowsの標準のレンダリングよりは全然マシだけどさ。
221名無し~3.EXE:2006/09/07(木) 11:15:57 ID:CUlNH6tM
>>220
TextOutのフックかぁ。面白いね。
3倍オーバーサンプリングするくらいなら、
レンダラをFreeType2にしちゃうのはどうかな?
222名無し~3.EXE:2006/09/07(木) 12:50:27 ID:QCnZgWuf
>>221
FreeType2をレンダラとして使った場合、FontLink周りがメンドクサそうだし、
パフォーマンスが出るかどうかがちょっと不安。でもそれ以前に漏れのスキルが足らなくて。

3倍で描画するときに、縦横1ピクセルずつずらして計4回の描画にしたら、
幾分マシな結果が得られた。
(濃いフォント/小さいポイントで複雑な漢字を表示させると真っ黒になるが)
どうやらOperaは全ての文字をTextOutで出力しているらしく、
Oprera.dllに引っ掛けると、ブラウザ部からUIまで見事に全てアンチエイリア
シングがかかってしまった。で、角ゴW3を使うAppleのページのスクリーンショット。
ttp://up2.viploader.net/pic/src/viploader294263.jpg
Windows標準の角ゴW3に比べたら雲泥の差。なんてったって、ふつうに「読める」。
Pentium [email protected]で動かしてるけど、とりあえずOperaならパフォーマンスは
なんとか常用に耐えるレベルで動いてる。

これをsystem32のgdi32.dllと置き換えたら・・・まるで旧MacのSmoothTypeだな。
ま、引き続き他の文字列描画関連のAPIを実装しないと実用にならないので、もう
ちょっと頑張ってみる。
223名無し~3.EXE:2006/09/07(木) 12:53:29 ID:STkYB3HH
pngで頼む
224名無し~3.EXE:2006/09/07(木) 13:13:19 ID:QCnZgWuf
把握した。ページ全体のスクリーンショットを撮ってみた。
PNGで一枚1MB超えてしまうサイズので、注意して開いてください。
ttp://up2.viploader.net/pic/src/viploader294269.png
これがOS XのSafariのレンダリング結果。(iCaptureで撮影してもらってきた
ttp://up2.viploader.net/pic/src/viploader294268.png
これが今回のOperaでのレンダリング結果。(ペイントで適当に重ね合わせた
225名無し~3.EXE:2006/09/07(木) 13:35:19 ID:8Bnqj/KZ
下の方が目に優しいと思うw
226名無し~3.EXE:2006/09/07(木) 17:01:09 ID:QCnZgWuf
ttp://kasamatusan.sakura.ne.jp/cgi-bin2/src/ichi51605.zip.html
とりあえずビルドしたものを上げてみる。ソース付き。
(昨日VC++6.0を触り始めたばかりだからかなり怪しいが)
詳しい説明はreadme.txtに書いておいたけど、かなりぁゃιぃ代物なので人柱さん専用。
227名無し~3.EXE:2006/09/07(木) 18:30:18 ID:p8YtNahT
早速、Operaに使ってみた。
小さなフォントも見易くなった…ように感じる。
228名無し~3.EXE:2006/09/07(木) 18:41:34 ID:5kD/WLiF
Javaとクッキー切ってたら赤ん坊に怒られた。
229名無し~3.EXE:2006/09/07(木) 18:43:31 ID:5kD/WLiF
いけねぇ、肝心のお礼が・・・。

>>226
有難く頂戴しました。
230名無し~3.EXE:2006/09/07(木) 19:45:58 ID:DALW8WZZ
このスレを思い出した
http://pc8.2ch.net/test/read.cgi/win/1038101090/
231名無し~3.EXE:2006/09/07(木) 20:46:25 ID:84Tz7rtb
>226
すっげえ…… GJ!

ヱロゲのAVG3216M.EXEに仕掛けてみた。感動した。
232名無し~3.EXE:2006/09/07(木) 21:27:57 ID:8Bnqj/KZ
>>226
SMP_AAみたいな普通に濃いフォントだと、↓こうなりますw
ttp://kunekune.breeze.jp/up/uploader/src/up1972.png
233名無し~3.EXE:2006/09/07(木) 21:31:16 ID:Y5UvcZ0M
>>232
ワロタw
234名無し~3.EXE:2006/09/07(木) 21:59:31 ID:8Bnqj/KZ
元に戻すと明らかに体感速度向上しますた。
システム全体に適用する勇気はありませんです…。
235名無し~3.EXE:2006/09/07(木) 22:09:42 ID:84Tz7rtb
いろいろ試してみました
表示位置がズレてしまってうまくいかないことが多かったです
236名無し~3.EXE:2006/09/07(木) 22:14:51 ID:QCnZgWuf
>>232
現在はずらして4回描画してるので、いちばん濃い状態です。
2回描画ならもうちょっと薄くなるし、濃い目のフォントなら1回でもいいかもしれない。
レジストリもしくはINIファイルで変更できるようにしておいたほうがいいかもね。
>>234
適用して動くかどうかも分からないから・・・試すときは仮想マシン上で。
速度的に最もキモになる縮小部分のコードが現状ではかなり生ぬるいかもしれません。
コンパイラもVC++6.0だし、グローバル変数に格納されたLUTにアクセスしてるから。
もっと最適化できればいいんだけど・・・。
237名無し~3.EXE:2006/09/07(木) 22:17:58 ID:CzbkEV2f
ずらして四回じゃなくて
重ねて四回のほうがいいんじゃないか
238名無し~3.EXE:2006/09/07(木) 22:19:14 ID:QCnZgWuf
>>235
単純にフォントサイズを3倍したとき、表示領域も元の三倍になるわけではないからね。
おそらくGetTextExtentPoint32あたりをもっとマトモな数字を返すようにしないと
いけなくて、ソースには書きかけで残ってるんだけど、Janeで試したら思ったような
結果にはならなかったんだよなぁ。何故だろう。
239名無し~3.EXE:2006/09/07(木) 22:43:35 ID:xbVhzoNS
MSGOTHICがMeiryoより奇麗に出たら教えてくれ。
240名無し~3.EXE:2006/09/08(金) 18:46:22 ID:Cfhm5Sya
今、一度3倍で書いてるってことは、横方向の縮小を行わずに、液晶のサブピクセルに
そのまま当てはめればClearTypeもどきが実装できる予感。ただし、そうなると今度こそ
アルファブレンドをしなきゃいけないのが面倒だ。
241名無し~3.EXE:2006/09/08(金) 20:02:50 ID:r3nsJjvI
PDFのレンダリングはきれいだと聞くが、これも別DLLか何かでラスタライズしてるのかな
242名無し~3.EXE:2006/09/08(金) 20:37:41 ID:Iu4ewlBJ
>>241
CoolType
243220:2006/09/08(金) 21:07:34 ID:Cfhm5Sya
ttp://ja.wikipedia.org/wiki/ClearType
これを参考にして、ClearTypeモドキを簡単に実験してみた。
(赤チャネルを左に、青チャネルを右に1ピクセルずらしてから縮小)
・・・>>224と比較しても、あまり変わった気がしないぜ?
ttp://up2.viploader.net/pic/src/viploader295440.png
244名無し~3.EXE:2006/09/08(金) 21:20:27 ID:2Eg9EkG/
RGBが逆。
245名無し~3.EXE:2006/09/08(金) 21:26:00 ID:Iu4ewlBJ
>>243
>>224の下のと並べて比較すると、
「あれ、目が悪くなったのかな?」って感じがします。
246名無し~3.EXE:2006/09/08(金) 21:29:56 ID:Cfhm5Sya
>>244
うわぁ・・・ホントだ('A`)dクス
ttp://up2.viploader.net/pic/src/viploader295469.png
一転して、だいぶ良くなった希ガス。
247名無し~3.EXE:2006/09/08(金) 23:15:32 ID:wH/60i9y
だが、それなら標準AAの方がマシ
248名無し~3.EXE:2006/09/08(金) 23:45:47 ID:fR2of2Kh
>>246
RGBの並びをどっちにするかはClearTypeでも選択できるので
設定項目を付けておいた方がいい。
249名無し~3.EXE:2006/09/08(金) 23:46:13 ID:o+6plqYn
WinのClearTypeを使うより>>246の方がきれい、ってこと?
MeiryoみたいなClearType用のフォントでも>>224下できれいに出るの?
250名無し~3.EXE:2006/09/08(金) 23:46:39 ID:bh2lZDXc
いや
なかなかいいんじゃない?
CoolTypeに近づいた感じ
251名無し~3.EXE:2006/09/09(土) 00:06:22 ID:f4ECneeK
これで本家ClearTypeより軽くなったらすげーですね。
252名無し~3.EXE:2006/09/09(土) 04:02:04 ID:+Cr414W8
ttp://kasamatusan.sakura.ne.jp/cgi-bin2/src/ichi51831.zip.html
ええと、今回から設定ファイルで文字の濃さを調節できるようになってます。
デフォルトではオフになっていますが、ClearTypeモドキもオンにできます。
ただしちょっと表示がバグるので注意。詳しくはreadme.txt参照。
文字表示のトロさは相変わらずです。
253名無し~3.EXE:2006/09/09(土) 04:06:59 ID:+Cr414W8
うげ、gdi++.iniを添付し忘れた。別に無くても動くけど、
↓の内容で保存して使ってください。パラメタの説明はreadmeに。
[General]
Weight=0
UseSubPixel=0
SubPixelDirection=0
254名無し~3.EXE:2006/09/09(土) 04:13:27 ID:i5mqRraQ
>>252-253 乙! 今、試せないけど頂いた。 
255名無し~3.EXE:2006/09/09(土) 05:18:24 ID:k+A1KhkY
>>252
Thanks!!!!!!
マジちょーーーーーーーーーーーーーキレイ!!!!

Firefoxじゃ使えないみたいだけど・・・orz

256名無し~3.EXE:2006/09/09(土) 05:22:09 ID:f4ECneeK
Janeでテストちう。
ClearType切って、UseSubPixelをやるとClearTypeと同様の効果が得られますた。
スレビュー部だけだから、他の部分はだめだこりゃだけど…。

いい感じなのでIEでテスツしてみたいけど、
どこを弄ればいいのか解らんです…。orz
257名無し~3.EXE:2006/09/09(土) 07:29:43 ID:OBNLYmE7
A,B,CのTTFフォントを用意します。(合成にはMAKETTC.EXE使用)

1 A,B,Cのそれぞれのフォント名をttfneme3で先に書き換え、合成したTTCフォント=D

2 A,B,Cを先に合成し、ttfname3でフォント名を書き換えたTTCフォント=D'


こうしてできたDとD'のMD5が相違し、またDの方はなぜか10バイト小さいです。
これは一体どちらが正しいのでしょうか?


私を悩ませるのは、
DとD'をBreakTTC.exeで分解してできた6個のTTFフォントをそれぞれ比較すると
MD5が一致してしまうことです。

また、DとD'をttfname3にD&Dして出来るXMLファイルも、一字違わず同一の物です。
258名無し~3.EXE:2006/09/09(土) 09:42:43 ID:gnkX40ym
259名無し~3.EXE:2006/09/09(土) 11:17:34 ID:ADHriO2R
>>257
Dは makettcで合体したTTC
D'は ttfname3で合体したTTC
と考える。
(ttfname3は 内部でTTFに分解、合体してる)

生成するTTCヘッダー部分が少し違うから ファイルサイズが変わる。
TTCヘッダーが違うだけだから、breakttcすると全く同じTTFが出来る。

まぁ、あまり細かい事を悩まないほうが良いぞw
260名無し~3.EXE:2006/09/09(土) 11:54:17 ID:8oD5vP+Y
中途半端な知識で持って無くて,頓珍漢な質問だったら申し訳ないんだけど,
TextOutじゃなくてExtTextOutを使っているプログラムには意味ない?
261名無し~3.EXE:2006/09/09(土) 12:19:05 ID:+Cr414W8
>>256
一応ClearType切らなくても、たぶんレンダリング結果は変わらないと思う。
IEのメインはIEFRAME.DLLかな。最悪、Dependency WalkerでIEが使うDLLを調べて、
それらを全部同じディレクトリにコピーして書き換えれば動くかな・・・わからない。
ちなみに、いちいちファイルを直接書き換えずに、一気に全プロセスをフックできる方法が
あるらしく、ちょっと調査中です。(APIHijackってヤツですが)
>>260
今実装してあるのは、とりあえずTextOutだけですね・・・ExtTextOutを呼ぶと
残念ながらそのままオリジナルのGDI32.DLLにスルーされてしまいます。
(ちなみにExtTextOutはTextOutよりも描画が速いらしい)
で、残り、実装すべき関数は
 GDI32: ExtTextOut, TabbedTextOut, PolyTextOut
 USER32: DrawText, DrawTextEx
あたり。どうやらGrayStringはMSDNにTextOutを呼ぶって書いてあるし、
無視できそうな予感。どの関数でも、最初にどのくらいのサイズで描かれ
るかが計算できれば、後はだいたい同じ処理になるでしょう。
262名無し~3.EXE:2006/09/09(土) 12:21:14 ID:OBNLYmE7
>>259
なるほど!
ヘッダが違うだけで中身一緒なんですね。
確かにバイナリエディタで見たら少しだけ違ってました。
D'の方が自分的に作業が楽だったので
これからは気にせずやろうと思います。
どうもありがとうございました。
263名無し~3.EXE:2006/09/09(土) 12:27:43 ID:UffYa8gc
>>258
このフォントなんだっけ。
264名無し~3.EXE:2006/09/09(土) 12:48:33 ID:f4ECneeK
IEFRAME.DLLがうちのシステムにはありませんでしたw

>>263
多分Noel
265名無し~3.EXE:2006/09/09(土) 12:55:37 ID:nWpfdT/K
>>263
Noel
266名無し~3.EXE:2006/09/09(土) 13:03:11 ID:UffYa8gc
>>264-265
なるほど、d
267名無し~3.EXE:2006/09/09(土) 13:08:40 ID:Zge9nk2B
>>261
素早いレスありがとう.
テキスト描画の方法って結構あるんですね.
大変かもしれないけど頑張ってください.
積極的に人柱やりますので.
268名無し~3.EXE:2006/09/09(土) 13:47:34 ID:ePVGTDAY
>>261
> ExtTextOutを呼ぶと
> 残念ながらそのままオリジナルのGDI32.DLLにスルーされてしまいます。
Firefoxで効果がないのはそのせいだな
>>262
蛇足だが、A,B,CがBreakTTCで分解された元は1つのフォントとかでない限り、
合成する意味は全くない。
269名無し~3.EXE:2006/09/09(土) 13:48:33 ID:uXL04+b3
270名無し~3.EXE:2006/09/09(土) 14:18:16 ID:OBNLYmE7
>>268
MeiryoKEをMeiryoKe_ゴシック、MeiryoKe_Pゴシック、MeriyoKe_UIゴシックに分解して
MeiryoPゴシックだけMeiryoModAAに入れ替え、
ttfname3でフォント名をMS標準に書き換えてから合成しました。

MSGothic.ttcを入れ替えるための方法だったのですが
フォントリンクとか使った方がスマートだったかもしれませんね。
271名無し~3.EXE:2006/09/09(土) 14:56:00 ID:9Ji/cPAK
gdi++をoperaで使おうとしたけどうまくいかなかった
まったく表示が変わらない
gdi++.dllを削除すると起動時にエラーが出るから、一応組み込まれてるっぽいんだがわけわからん

そもそも、うちの環境ではoperaは普通にインスコしても日本語フォントの表示が異常
一部分だけビットマップになったり、日本語じゃない漢字・かなで表示されたりとめちゃくちゃ
結局operaはアンインスコしました
>>258みたいな表示をWindowsで見たかったんだけどな〜

あと、gdi32.dllを置き換えるってのをやってみました
見事に起動しなくなりました
ありがとうございました
272名無し~3.EXE:2006/09/09(土) 15:31:11 ID:k+A1KhkY
>>271
> 普通にインスコしても日本語フォントの表示が異常
それはgdi++適用時?
もしそうなら,gdi32のバージョン合ってる?

ところで,
> gdi++をoperaで使おうとしたけどうまくいかなかった
> まったく表示が変わらない
だけど,たまたま自分が使用していたバイナリエディタは,
文字列検索だと強制的に大文字と小文字の区別がされる仕様
で,"gdi32.dll"を書き換えただけじゃダメだった.
"GDI32.DLL"も書き換えたら動いたよ.

まったく検討違いだったら申し訳.
273名無し~3.EXE:2006/09/09(土) 15:34:53 ID:6L5pFP/E
安定性とパフォーマンスの両立は大変だろうけど、期待してます>作者さん
274名無し~3.EXE:2006/09/09(土) 15:48:35 ID:k+A1KhkY
http://www.imgup.org/iup258691.png.html
ところでコレって環境依存なのかしら
この現象が出た人居ますか?
275名無し~3.EXE:2006/09/09(土) 15:51:48 ID:Dwq2HgF6
>>274
うちもでるよ
276名無し~3.EXE:2006/09/09(土) 16:20:14 ID:UIVO2C/X
だが、それならFreeTypeの方がマシ
277名無し~3.EXE:2006/09/09(土) 16:42:43 ID:9Ji/cPAK
>>272
うまくいったみたい。ありがとね
ttp://www.imgup.org/iup258711.png

>>274
うちもなる
278名無し~3.EXE:2006/09/09(土) 16:56:51 ID:xPsd1yxi
>>277
そのひらがなとカタカナのフォントなんて奴?
279名無し~3.EXE:2006/09/09(土) 17:32:44 ID:UIVO2C/X
>>126
Arial Narrow と MS Pゴシック が良いかな。

フォントリンクだとエクセルで使えないけど。
自分だけ奇麗で良ければメイリオに置き換える。
280名無し~3.EXE:2006/09/09(土) 17:52:03 ID:atJgdMl1
>>274
Opera上ではないので違う現象なのかもしれないが、再現できた。

・UseSubPixel=1 のときに出る。
・SubPixelDirection の値で出かたが違う。
・SubPixelDirection=0 のとき、左に青・右に黄色。=1だと逆。
・フォントの色を変えたときに出る。何度も同じところで繰り返すと、どんどん濃くなる。
281名無し~3.EXE:2006/09/09(土) 20:45:49 ID:xmKneHTi
>>278
DFぽぽる(のビットマップ抜き)だな
282名無し~3.EXE:2006/09/09(土) 22:20:33 ID:ePVGTDAY
>>281
> (のビットマップ抜き)
gdi++使ってると3倍に拡大してから縮小描画してるから
3倍サイズのビットマップを持ってない限りビットマップはもともと表示されないはず
283名無し~3.EXE:2006/09/09(土) 22:42:01 ID:f4ECneeK
じゃMSゴシックでもビットマップ無しって事か。
手元に無いので試せないけど。
284名無し~3.EXE:2006/09/09(土) 22:48:45 ID:xmKneHTi
おーなるほど
285名無し~3.EXE:2006/09/09(土) 23:40:25 ID:f4ECneeK
XPのCDからMSGOTHIC.TTCを引っ張り出してきて、テストしますた。
ttp://kunekune.breeze.jp/up/uploader/src/up2160.png

普通に綺麗なんですけどw
そもそもWinのデフォのフォントが汚いってのが、
フォント界隈が盛り上がる出発点なだけに、
ちょっと感慨深いもんが。
286名無し~3.EXE:2006/09/09(土) 23:44:33 ID:ufYkIJfb
>>285
どうみてもMSゴシックに見えないw
レンダリングエンジンが一番の問題で、
フォントをどうこうしても対処療法でしかないってのがよくわかったわw
287名無し~3.EXE:2006/09/09(土) 23:45:47 ID:9BCJRCH3
>>285
マジだ。すげぇ。
288名無し~3.EXE:2006/09/09(土) 23:51:19 ID:xmKneHTi
MS ゴシックは印刷したりすればちゃんとしたフォントだからな
289名無し~3.EXE:2006/09/09(土) 23:52:46 ID:zttWZsnY
>>288
腐っても字体は、本明朝だしな。
290名無し~3.EXE:2006/09/09(土) 23:52:46 ID:zCMNda6t
ちと太過ぎな気が。
291名無し~3.EXE:2006/09/10(日) 00:18:51 ID:AYh4OpDl
>>289
( ゚д゚ )
292名無し~3.EXE:2006/09/10(日) 00:41:19 ID:0Ky8zwk1
バイナリエディタでexe開いてもやり方分からなすorz
293名無し~3.EXE:2006/09/10(日) 00:41:41 ID:7tSTtjs5
>>291
本明朝が字体なのは、MS明朝ですたorz
MSゴシは、何だったけ?
294名無し~3.EXE:2006/09/10(日) 00:47:25 ID:x/TlTm4H
>>292
gdi32.dllって文字を探して
gdi++.dllって書き換えるだけ
295名無し~3.EXE:2006/09/10(日) 00:50:52 ID:icGn26zf
MSゴシに回帰する人が増えるかもw
当たり前だけどAA対応だし。ただ、ちょっとズレル(あまり気にならない程度)
296名無し~3.EXE:2006/09/10(日) 00:50:58 ID:0Ky8zwk1
16進数が2文字ずつ並んでるだけなんだけど。
stirlingてエディタ。
297名無し~3.EXE:2006/09/10(日) 00:51:44 ID:vUYR/DFa
>>293
普通に「RFゴシック」。
298名無し~3.EXE:2006/09/10(日) 00:59:16 ID:7tSTtjs5
>>297
ども
299名無し~3.EXE:2006/09/10(日) 01:01:52 ID:er34Efgo
>>290
ビットマップに比べてアウトラインは元々太い。
http://khdd.net/kanou/kangae/2004/Dec.html#1.2.2
だからMS ゴシックからビットマップ抜きフォントを作成する場合は
通常細線化フィルタを掛ける。
300名無し~3.EXE:2006/09/10(日) 01:02:43 ID:3fxP2B/R
>>296
それ、なぜか時々落ちるんだよな…。
自分はフォントをいじっているわけではないのでスレ違いだけど。
301名無し~3.EXE:2006/09/10(日) 01:04:03 ID:vUYR/DFa
>>290,298,299
MSゴシックの元になったリョービのゴシックEが
見出し用の太さだから。
302名無し~3.EXE:2006/09/10(日) 01:16:28 ID:jgwWsbhS
>>299
かなり関係ないけど、gdi++使用のOperaでそのページを見たら、すごく綺麗なので驚いた。

ttp://pc.gban.jp/?p=5712.png
303名無し~3.EXE:2006/09/10(日) 01:25:52 ID:KDa7fYJP
x86のアセンブラをゼロから勉強して、付け焼刃の最適化に挑戦中。
それにしてもFlashのラスタライザって、軽量すぎるぜ?
>>274
うちもなるなる(ぉ
>>280
dクス。本来のサイズよりも、左右1ピクセルずつ余計にDCからコピーしてくれば
改善するかも・・・しれない。あくまで「簡易」なので横着な実装ですが。
>>282
Windowsではコモンダイアログの中で最小で7ptまで選べるようになってるけど
(ただし直接指定すればそれ以下のポイントでも表示できる)、その場合でも
7 x 3 = 21pt なんて特大ビットマップを持ってるフォントなんてまずないから、
3倍で描画すれば、全てのフォントでアンチエイリアシングが掛かる計算です。
本当は2倍の方が都合はいいんだけど、そこらへんの問題があるので、3倍なのです。
>>299
そのページのAAの考察、なかなか鋭いね。