1

一般的な Adob​​e Myriad Pro フォントがインストールされています。これらには、ミリアド プロ レギュラー、ミリアド プロ ボールド、ミリアド プロ セミボールドが含まれます。CTFontRef baseFontMyriad Pro Regular を指す があり、必要なフォント サイズが であるとしsizeます。次のコードを実行します。

CTFontRef boldFont = CTFontCreateCopyWithSymbolicTraits(baseFont, size, NULL, kCTFontBoldTrait, kCTFontBoldTrait);

返されるフォントは Myriad Pro Bold ではなく、Myriad Pro Semibold です。

名前付きスタイル 'Bold' を要求する以外に、代わりに Myriad Pro Bold を返すように強制する方法はありますか? 私は、このコードを完全に一般的なスタイル名にすることなく、完全に汎用的なものにしたかったのです。

最初にフォントを作成するときに属性ディクショナリの一部として太字の特性を渡すなど、さまざまな順列でこれを試しました。また、フォント自体を少しいじりました。太字フォントの太さは表で 700 で<OS/2>、半太字フォントの太さは 600 です。PANOSE の太さはこれに対応しています。ただし、セミボールド フォントとボールド フォントmacStyleの表のフィールドには両方ともボールド フラグが設定されているため、おそらくこれが Core Text で使用されているものです。<head>しかし、それをより差別的にする方法はありますか?

4

2 に答える 2

0

ドキュメントを読んだことに基づいて、一般的なフォント処理に関するある程度の知識に裏付けられていますが、具体的には Core Text ではないため、可能かもしれませんが、簡単ではありません。

CTFontCreateCopyWithSymbolicTraits()ドキュメントsymTraitValueでは、およびsymTraitMaskパラメータのタイプがであると指定されていますCTFontSymbolicTraitsCTFontDescriptor()ドキュメントでは、使用している「太字」の値を定義しています

kCTFontBoldTrait = (1 << 1)

したがって、これは明らかにブール型の特性です。ただし、これまで見てきたように、フォントの太さはスペクトルであり、ブール値の特性ではありません。ワープロ UI の「ボールド」ボタンは何十年もの間、フォントの太さをブール値の特性として提示してきました。CTFontCreateCopyWithSymbolicTraits()必要な表現力がありません。

うまくいくかもしれないもう1つのアプローチは、 を呼び出してみることCTFontDescriptorCreateMatchingFontDescriptors()です。この関数CTFontDescriptorRefを初期フォントに渡し、CFSetRef存在しなければならない属性とともに を渡します。この関数は、要求した属性にすべて一致するフォント記述子の配列を返します。

したがって、CTFontDescriptorRefMyriad Pro Regular に を渡しCFSetRef、太字にしたいということわざを渡して、返された配列内のすべてのフォント記述子を調べて、最も重みの大きいものを見つけることができます。

私はこのコードを書いたことがなく、Core Text について無知であるため、何かが欠けている可能性がありますが、それはもっともらしいアプローチのように思えます。

于 2012-02-03T23:17:58.317 に答える
0

には、-1 から 1 までの浮動小数点を表すを指定できる場所である必要があるCTFontDescriptor属性を指定できます。これにより、重みのスペクトルが得られます。1 は最も太字のバリアントであり、0 は通常/中程度です。 .kCTFontTraitsAttributeCFDictionaryRefkCTFontWeightTraitCFNumberRef

于 2013-05-03T11:42:58.200 に答える