Vous n'êtes pas connecté. Ce forum permet seulement les utilisateurs connectés pour poster. Si vous voulez faire un post sur le forum, s'il vous plaît connecter.
Télécharger
Développer
Compte
Télécharger
Développer
Connexion
Mot de passe oublié ?
Créer un compte
Langue
Aide
Langue
Aide
×
Connexion
Nom du compte
Mot de passe
×
Mot de passe oublié ?
Traduction statut du Français
Catégorie :
Logiciel
Peuple
PersonalForge
Magazine
Wiki
Recherche
OSDN
>
Trouver un logiciel
>
Desktop Environment
>
Fonts
>
VL Gothic Font Family
>
Forums
>
VLゴシックへの要望
>
VL ゴシック 13pt等で、GetTextExtentPoint32が正しい文字列幅を返さない。
Description
Résumé du projet
Dashboard - Développeur
Page Web
Développeurs
Galerie d'images
Liste des flux RSS
Activité
Statistiques
Historique
Téléchargements
List of Releases
Stats
Communication
Liste des forums
Forum des développeurs (1)
VLゴシックへの要望 (25)
Nouvelles
Forums:
VLゴシックへの要望
(Thread #35498)
Retour à la liste de discussion
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+では正常に文字
> 幅を得られるようでした。
>
> 何かわかりますでしょうか。
Répondre à
#73151
Re: VL ゴシック 13pt等で、GetTextExtentPoint32が正しい文字列幅を返さない。 (2014-05-26 22:22 by
matsu_boolean
#73171)
返信ありがとうございます。
GetTextExtentPoint32についてですが、文字列の描画に必要な幅と高さをドット単位で取得するWindows APIです。
仮説ですが、もしかして VLフォントでは、ASCII文字コードの範囲で、埋め込みビットマップフォントを持つのでしょうか?。GetTextExtentPoint32は、すべて埋め込みビットマップフォントで賄えるグリフかつ文字サイズの場合、埋め込みビットマップフォントから文字列幅を得ているのではないかという気がします。
実際の描画は(アンチエリアスのため?)埋め込みビットマップフォントを使わず描画するため、埋め込みビットマップでないフォントと埋め込みビットマップフォントの幅が違う場合このような現象が発生するのかなと考えます。
この仮説が正しいとすると、多分にWindows API側の問題かなという気もしますが、他のフォントでは起こりませんし、VL ゴシック側で対処は可能でしょうか?。
Répondre à
#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 などでも起こらないで
しょうか?
Répondre à
#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も大丈夫)をつなげた文字列で幅を計算)ので優先順位は低くともかまいません。
以上よろしくお願いいたします。
Répondre à
#73172