問題タブ [directwrite]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
738 参照

c++ - DirectWrite の RTL テキスト幅

IDWriteTextAnalysisSink/を使用AnalyzeScriptして、LTR (英語) と RTL (ヘブライ語) の混合テキストを DirectWrite (C++) で表示し、テキスト幅を次のように計算します。

からglyphAdvances返されGetGlyphPlacementsます。

ただし、右から左へのテキストの場合、これは不正確であることが多く、テキストが重なるなどの原因になります。これは正しい方法ですか?

ありがとう。

0 投票する
1 に答える
224 参照

windows - DirectWrite を使用して Word 境界を決定する

DirectWrite は、IDWriteTextAnalysisSink::SetLineBreakpoints() を介して改行情報を提供します。ただし、 Unicode Annex #29: Unicode Text Segmentationに従って、単語の境界も決定する必要があります。

DirectWrite を使用してこれを行う方法はありますか? そうでない場合、Windows デスクトップや WinRT で DirectWrite のテキスト レイアウト システムと連携して動作する代替手段は何ですか?

0 投票する
2 に答える
566 参照

c++ - DirectWrite: ラテン文字と複雑な文字には異なるフォントを使用する

DirectWrite (C++) でテキストを描画するために使用CreateTextLayoutしています。テキストはヘブライ語と英語が混在しています。ラテン語とヘブライ語の文字に別のフォント/フォント サイズを使用する方法はありますか?CreateTextFormat

ありがとう。

0 投票する
2 に答える
845 参照

html - Chrome 35 DirectWrite (デフォルトでオン) でサイト メニューが壊れる

最新の Chrome 35 Stable に更新したところ、フォントがより滑らかになっていることに気付きました。DirectWrite が実装されています。素敵なもの。

ただし、私のサイトでは壊れているようです。

メインメニューには次のマークアップがあります (非常に単純です):

それぞれaが次のようにパディングされます:padding: 16px 17px; それらは、親内のブロックとしても表示されますli

それぞれa > spanのスタイルは次のようになります。

新しい DirectWrite により、メニューは次のように表示されます。

DirectWrite を使用

次のように表示される場合:

DirectWrite なし

余分な行はどこから来たのですか?回避策はありますか?テキストが最初の行に戻るかどうかを確認するためにamargin-rightを追加しようとしましたが、そのような運はありません。span

との完全な LESS は次aspanとおりです。

編集:

ご存知のように、私は を使用してい@font-faceます。使用しているフォントは Lato です。オフにして Arial または Helvetica にデフォルト設定しても問題は解決しません。

0 投票する
1 に答える
228 参照

dpi - em 正方形が特定のサイズになるようにグリフを DirectWrite する

楽譜をレンダリングするアプリケーションに取り組んでいます。音楽記号は通常のフォント ファイルで指定されます。このファイルでは、em 四角形の高さが通常の 5 線譜の高さに対応するという規則が使用されます。たとえば、符頭のグリフの高さは約 0.25 em で、これは譜表の 2 つの線の間の距離です。

レンダリングに関しては、4 単位が譜面の 5 線譜の高さに対応する座標系を使用します。したがって、em 正方形が最終的に 4 単位の高さでレンダリングされるように、グリフをレンダリングする必要があります。ただし、DirectWrite ではテキスト サイズをデバイスに依存しないピクセル (DIP) でしか指定できないため、座標系をどうやって切り替えるかについて混乱しています。これには 2 つの部分があります。

  • DIP で指定されたフォント サイズから物理ピクセルで高さを計算できますが、その高さに何がマップされますか? em 平方またはその他のデザイン空間メトリック?
  • 任意の変換行列を使用している場合はどうなりますか? 使用している座標系で意味のある値を取得するために DIP を指定するにはどうすればよいですか?

そして、適切な測定のために:

  • これを機能させると、DIP 値が物理ピクセルと明確な関係を持たないため、フォント ヒンティングが台無しになるのでしょうか?
0 投票する
1 に答える
636 参照

c# - DrawTextLayout が SharpDX の SetDrawingEffect からのブラシを無視するのはなぜですか?

私の目標は、特定の範囲のサイズと不透明度が異なる単一のレイアウトでテキストを描画することです。方法は一ID2D1RenderTarget::DrawTextLayout通りあるようです。

defaultForegroundBrushパラメータのドキュメント:

描画効果 ( IDWriteTextLayout::SetDrawingEffectメソッドで指定) としてブラシが関連付けられていない textLayout 内のテキストを描画するために使用されるブラシ 。

IDWriteTextLayout::SetDrawingEffectメソッドの備考欄によると、

ID2D1RenderTarget::DrawTextLayout を使用してテキストを描画し、そのブラシを使用して指定した範囲のテキストを描画する場合、色ブラシやグラデーション ブラシなどのID2D1Brushを描画効果として設定できます。

この描画効果は指定された範囲に関連付けられており、描画時に範囲が描画されるときにコールバックを介してアプリケーションに戻されます。

ID2D1RenderTarget::DrawTextLayoutで設定されたブラシを確実に使用するようIDWriteTextLayout::SetDrawingEffectです。この管理されていない C++ の回答は、この考えを裏付けているようです。

ただし、実際には、を使用して設定したDrawTextLayoutものは無視されます。適切な範囲のスタイルとサイズを取得しますが、すべてが既定のブラシを使用してペイントされます。SolidColorBrushSetDrawingEffect

これを回避するには、カスタム テキスト レンダラー ( gist ) を実装しましたID2D1RenderTarget::DrawTextLayout。私は満足していたでしょうが、TextRendererBaseとのパフォーマンスDrawGlyphRunは よりも 25% 以上遅くなりID2D1RenderTarget::DrawTextLayoutます。

この問題の原因は何ですか? ドキュメントが示唆するように色を使用し、引き続き使用できID2D1RenderTarget::DrawTextLayoutますか?

0 投票する
1 に答える
1972 参照

visual-c++ - GetDesignGlyphMetrics を使用して DirectWrite で Unicode 文字の幅を計算する

GDI から DirectWrite への移行プロジェクトに取り組んでいます。各 unicode 文字の幅を計算したいのですが、GDI では、これは GetCharWidth を使用して達成されます。msdn ブログで、GDI の GetCharWidth の代わりが GetDesignGlyphMetrics であることがわかりました。

DWRITE_GLYPH_METRICS を取得するためにこの関数 GetDesignGlyphMetrics を使用する方法を教えてもらえますか?

最初のパラメータ UINT16 const* glyphIndices をインスタンス化する方法は?

0 投票する
0 に答える
735 参照

unicode - Unicode 文字の幅を計算する

GDI APIを使用せずに、ダイレクトライトでユニコード文字の幅を計算しようとしています.私の問題は、一部の文字が全角で一部が半角文字であるため、左側のベアリングと右側のベアリングが差分文字によって異なるため、以下の式は機能しません. この問題を解決するにはどうすればよいですか?

0 投票する
2 に答える
822 参照

delphi - DirectWrite RegisterFontFileLoader : フォント ファイル ローダーを作成し、アクセス違反なしで Delphi に登録します

DirectWrite (Windows 7、Windows 8) API ベースのフォント ファイル ローダーを登録し、カスタム フォント コレクションで APIを使用する方法を示すWindows 7 SDK の CustomFont デモをDelphi で再作成しようとしています。DirectWriteこれにより、DirectWrite は、Windows フォント システムにグローバルに登録されていないアプリケーション リソース内から自分で読み込んだフォントを使用できます。アクセス違反で困っています。最小限のサンプルを以下に示します。

最初に、XE6 に同梱されている Delphi Direct2D インターフェイスについて疑問を持っています。Delphi ユニットでは Winapi.D2D1 がIDWriteFactoryタイプです。特定のインターフェイス メソッドを使用すると、フォント ファイル ローダーを登録できます: RegisterFontFileLoader

これを C++ direct2d ヘッダーと比較すると、上記が正しく変換されているかどうか疑問に思います。C/C++ direct2d ヘッダー (dwrite.h) に相当するものを次に示します。

通常の C++ では、"IDWriteFontFileLoader fontFileLoader" 型の変数を操作しないことに注意してください。インターフェイス参照は "IDWriteFontFileLoader*" 型です。varしたがって、上記のインターフェースでのキーワードの適用可能性に疑問があります。

dwrite.dllこれは、アクセス違反で内部でクラッシュする私のサンプル コードです。ここで明らかに間違ったことをしていますか?TLoader オブジェクトは単純で、TInterfacedObject であり、私が作成しましたが、オブジェクトを登録できません。このメソッドへの 1 つのパラメーターが正しく渡されていないのではないかと思います。何か間違ったことをしたのか、それとも Delphi RTL の Direct2D ラッパー コードにバグを見つけたのかわかりません。

C++ での作業サンプルは、Windows SDK にあります。上記の C++ のコードは、DirectWrite ファクトリと D2D1 ファクトリが作成された後に最初に行われることの 1 つとして、C++ デモに表示されます。

ResourceFontFileLoader::GetLoader()、通常の C++ の方法で、構築された C++ オブジェクト キャストをインターフェイス型にキャストするだけです。

上記のコードは C++ で IUnknown を手動で実装していますが、私のコードではTInterfacedObjectIUnknown をクリーンに実装する Delphi を使用しています。インターフェイス IDWriteFontFileLoader メソッド CreateStreamFromKey にはメソッドが 1 つしかなく、登録が行われるときに C++ デモで呼び出されないため、実際のコードには要因がなく、呼び出し規約、スタック、および前提条件の状態のみが含まれます。または DirectWrite ファクトリのセットアップ手順が考えられる理由のようです。