You are not logged in. This forum allows only logged in users to post. If you want to post in the forum, please log in.
다운로드
소프트웨어 개발
계정
다운로드
소프트웨어 개발
Login
Forgot Account/Password
계정 만들기
언어
도움
언어
도움
×
Login
Login Name
Password
×
Forgot Account/Password
Translation Status of 한국말
Category:
Software
People
PersonalForge
Magazine
Wiki
검색
OSDN
>
브라 우즈 소프트웨어
>
Desktop Environment
>
Fonts
>
VL Gothic Font Family
>
포럼
>
VLゴシックへの要望
>
VL ゴシック 13pt等で、GetTextExtentPoint32が正しい文字列幅を返さない。
Description
Project Summary
Developer Dashboard
웹 페이지
Developers
Image Gallery
List of RSS Feeds
Activity
Statistics
History
다운로드
List of Releases
Stats
Communication
List of Forums
Developers (1)
VLゴシックへの要望 (25)
News
포럼:
VLゴシックへの要望
(Thread #35498)
Return to Thread list
RSS
VL ゴシック 13pt等で、GetTextExtentPoint32が正しい文字列幅を返さない。 (2014-05-25 10:57 by
matsu_boolean
#73151)
初めまして。
VL ゴシックの13ptなどを使うと、Windows APIのGetTextExtentPoint32が正しい文字列幅
を返しません。TextOut APIで実際に描画される幅よりも若干狭い値を返します。どうも、
ASCII文字のみの場合のようです。
Windows XP, Vista, 7, 8.1で検証しました。13ptのほかに、11pt, 14pt, 16pt, 17pt, 19pt,
20pt等でも発生するようです。
Delphiのコードで検証しましたが、C#ではどうかと思い試したところ、GDI+では正常に文字
幅を得られるようでした。
何かわかりますでしょうか。
Re: VL ゴシック 13pt等で、GetTextExtentPoint32が正しい文字列幅を返さない。 (2014-05-26 11:04 by
dicey
#73158)
申し訳ありませんが、Windows についてはまったくわかりませんので、
原因などもわかりません。GetTextExtentPoint32 がなにを見て計算
しているのかわからないですが、、計算の問題なのではないかと思い
ます。(文字幅が2種類のみではないプロポーショナルフォントに対応
できていないのかもしれません)
[メッセージ #73151 への返信]
> 初めまして。
>
> VL ゴシックの13ptなどを使うと、Windows APIのGetTextExtentPoint32が正しい文字列幅
> を返しません。TextOut APIで実際に描画される幅よりも若干狭い値を返します。どうも、
> ASCII文字のみの場合のようです。
>
> Windows XP, Vista, 7, 8.1で検証しました。13ptのほかに、11pt, 14pt, 16pt, 17pt, 19pt,
> 20pt等でも発生するようです。
>
> Delphiのコードで検証しましたが、C#ではどうかと思い試したところ、GDI+では正常に文字
> 幅を得られるようでした。
>
> 何かわかりますでしょうか。
Reply to
#73151
Re: VL ゴシック 13pt等で、GetTextExtentPoint32が正しい文字列幅を返さない。 (2014-05-26 22:22 by
matsu_boolean
#73171)
返信ありがとうございます。
GetTextExtentPoint32についてですが、文字列の描画に必要な幅と高さをドット単位で取得するWindows APIです。
仮説ですが、もしかして VLフォントでは、ASCII文字コードの範囲で、埋め込みビットマップフォントを持つのでしょうか?。GetTextExtentPoint32は、すべて埋め込みビットマップフォントで賄えるグリフかつ文字サイズの場合、埋め込みビットマップフォントから文字列幅を得ているのではないかという気がします。
実際の描画は(アンチエリアスのため?)埋め込みビットマップフォントを使わず描画するため、埋め込みビットマップでないフォントと埋め込みビットマップフォントの幅が違う場合このような現象が発生するのかなと考えます。
この仮説が正しいとすると、多分にWindows API側の問題かなという気もしますが、他のフォントでは起こりませんし、VL ゴシック側で対処は可能でしょうか?。
Reply to
#73158
Re: VL ゴシック 13pt等で、GetTextExtentPoint32が正しい文字列幅を返さない。 (2014-05-26 22:59 by
dicey
#73172)
[メッセージ #73171 への返信]
> GetTextExtentPoint32についてですが、文字列の描画に必要な幅と高さをドット単位で取得するWindows APIです。
>
> 仮説ですが、もしかして VLフォントでは、ASCII文字コードの範囲で、埋め込みビットマップフォントを持つのでしょうか?。GetTextExtentPoint32は、すべて埋め込みビットマップフォントで賄えるグリフかつ文字サイズの場合、埋め込みビットマップフォントから文字列幅を得ているのではないかという気がします。
VLゴシック/VLPゴシックともに埋め込みビットマップフォントを持っていません。なので、この仮説は違いますね。
> 実際の描画は(アンチエリアスのため?)埋め込みビットマップフォントを使わず描画するため、埋め込みビットマップでないフォントと埋め込みビットマップフォントの幅が違う場合このような現象が発生するのかなと考えます。
>
> この仮説が正しいとすると、多分にWindows API側の問題かなという気もしますが、他のフォントでは起こりませんし、VL ゴシック側で対処は可能でしょうか?。
他のフォント、たとえばベースが同じ M+ や Koruri などでも起こらないで
しょうか?
Reply to
#73171
Re: VL ゴシック 13pt等で、GetTextExtentPoint32が正しい文字列幅を返さない。 (2014-05-28 07:55 by
matsu_boolean
#73189)
お返事ありがとうございます。
仮説が間違っていたとなると、ますますよく分からないですね。
M+ フォント(M+ 1m regular等)で試してみたところ、この現象は発生しませんでした。
Koruriも発生しませんでしたが、Koruriはプロポーショナルフォントでしょうか?。「VL Pゴ
シック」も該当現象は発生しないようです。
現在現象が発生しているのは、「VL ゴシック」の特定のフォントサイズ(11pt, 13pt,
14pt, 16pt, 17pt, 19pt, 20pt)かつ、ASCIIコード範囲内で構成される文字列のようです。
また、出力時の印字品質に「ClearTypeNatural」という値を指定すると該当現象が発生
しないことも分かりました。
一応回避策はある(ClearTypeNaturalを指定する or 非ASCII文字(ZERO WIDTH
SPACEも大丈夫)をつなげた文字列で幅を計算)ので優先順位は低くともかまいません。
以上よろしくお願いいたします。
Reply to
#73172