問題タブ [textrenderer]

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 投票する
2 に答える
1830 参照

c# - .Net Winforms の Graphics.DrawString と TextRenderingHint の潜在的なバグ

コントロールから単純に継承し、textrenderinghint を取得/設定するプロパティを提供するコントロールの OnPaint メソッドを次に示します。

これらのうちの 2 つをフォームに配置し、最初のラベルをデフォルトのままにして、2 番目のラベルを AntiAlias に変更すると、デザイン時には問題なく見えますが、アプリを実行すると、最初のラベルのレンダリング モードが変更されます。DrawString メソッドがシステムのデフォルトを変更したかのようです。

ここにいくつかの観察があります:

(1) 最初のコントロールのモードを私の場合のデフォルトと同じ ClearTypeGridFit に明示的に設定すると、問題が修正されます。

(2) フォームに 3 番目のコントロールを配置し、デフォルト モードのままにすると、問題が修正されます。

(3) TextRenderer.DrawText は問題を再現しません。

(4) ラベル コントロールを継承し、onpaint メソッドをオーバーライドしてレンダリング モードを設定すると、UseCompatibleTextRendering を設定しても問題は再現されません。これにより、ラベルは DrawText ではなく DrawString でレンダリングされます。

私は XP で cleartype を有効にし、Visual Studio 2008 Express Edition を使用しています。

ETA: C# で試してみましたが、同じことが起こります

0 投票する
3 に答える
3994 参照

.net - 表示されるテキストの Windows フォームの幅を計算する

表示されるテキストの Windows フォームの幅を計算する必要があります。フォームの幅は明らかにピクセル単位であるため、テキストの幅をピクセル単位で取得したいだけですが、これは機能しません。

計算されたフォームの幅が小さすぎます (テキストが途切れます) - 何が起こっているのでしょうか? MeasureText はピクセルを使用し、フォームの幅はピクセル単位です。

これはうまく機能しますが、正しくないと思います:

助けていただければ幸いです。

AnimationPic - PictureBox、キャプションがラベルに設定されています

デザイナーの画像:

これは、デザイナーの進行状況ダイアログでどのように見えるかです

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

graphics - GDIを使用してOTFフォントをレンダリングするTextRenderer.DrawText?

ビットマップイメージ上にテキストを描画しようとしていますが、調査を行ったところ、.NET /GDI+がOTFフォントをサポートしていないことがわかりました。GDIでOTFフォントをレンダリングするために使用できる場所をどこかで読みTextRenderer.DrawTextましたが、その方法がわからないようで、品質もGraphics.DrawString少しも比較できません。

  1. まず、VSでOTFフォントを使用することは可能ですか、それとも間違って読んだことがありますか?

  2. 次に、答えがTextRenderer.DrawTextの場合、OTFフォントをどのように使用しますか?クラスを使用する必要があるようですが、System.Drawing.Fontそれらがフォントをサポートしているとは思わないので、それが問題ですよね?

  3. GDI +を使用してフォントをTTFフォントのように明確にレンダリングするにはどうすればよいですか(Graphics.DrawString

  4. を使用すると、テキストの境界として(指定された幅、0の高さ)Graphics.DrawStringを使用でき、テキストは正しく折り返されました。を使用すると、使用する機能がRectangleFなくなり、高さ0を許可しないように見えるものだけが許可されますが、テキストは表示されます(つまり、テキストは長方形内にある必要があり、テキストの折り返しは機能しません)。私はそれを間違っていますか?TextRenderer.DrawTextRectangleFRectangle

どんな助けでも大歓迎です。これができない場合、OTFフォントを変換する方法、またはTTFバージョンでGothamフォントファミリーをオンラインで見つける方法はありますか?私は本当にこれらのフォントが必要です!

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

.net - .Net の PathEllipsis を使用したコンパクトな長い文字列

DrawStringを使用してツリービューコントロールの1つに描画している次の文字列があります。

ツリービューは、次のように上記の文字列を描画しています:

ここに画像の説明を入力

今、上の画像に示されている同じ文字列を別の文字列に圧縮したいと思います。http://www.codeproject.com/KB/vb/NewPathCompactPath.aspxを試しました

しかし、上の画像の結果は得られませんでした。

同じ文字列を使用して同じ結果を得る方法を教えてくださいTextRenderer.MeasureText

ありがとう

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

.net - TextRenderer.MeasureText は、文字「&」の Width=0 を返します

すべてはタイトルにあります。独自の OpenGL フォント システムを作成しようとしていますが、スプライト テクスチャに含める各文字のサイズを取得する必要があります。文字「&」(ASCII 38) を除いて、すべてが適切かつ正確に機能します。フォントを変更しても、この文字は常に幅にゼロを返します。高さは良いです。

最も奇妙なことは、「&&」の連結 (Chr(38) & Chr(38)) を測定しようとすると、結果が良さそうに見えることです! 同じフォントの別の範囲の同じコードポイントが同じエラーを生成するかどうかを確認していないため、回避策「if char is "38"」が「38 + 38」のサイズをテストするかどうかはわかりません常に動作します。

編集:申し訳ありませんが、私はとても愚かです。私はVB.Netを使用していると言うのを完全に忘れていました(ただし、C#は理解できます)。バインドにはOpenGLとOpenTKを使用しています。TextRenderer は GDi+ のクラスです。これを使用して、フォント テクスチャを作成します。これは実際には OpenGL の問題ではありません。

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

vb.net - DrawTextを使用してテキストの終わりを描画します

TextRenderer.DrawText()宛先の長方形が小さすぎる場合、テキストの終わりを描画できますか?

TextFormatFlags.Bottom私を助けませんでした。

言い換えれば、テキストをその上端でクリップする方法は?

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

c# - TextRenderer.MeasureText が正しく機能しないのはなぜですか?

利用可能なキャンバスの特定の幅を考慮して、テキストの高さを測定したいと考えています。渡すテキストは非常に長く、折り返されることがわかっています。そのために、私は次のように呼びます。

canvas に何を渡しても、常に 14 が返されsize.Heightます。

簡単なものがありませんか?

0 投票する
3 に答える
2723 参照

c# - WinForms アプリケーションでテキストを正確に測定、レンダリング、ヒット テスト、印刷する

必要がある:

  1. テキストを正確に測定します。
  2. グラフィックス コンテキストに適用される変換とスケーリングの変換が存在する場合に、テキストを 1 行ずつ画面のグラフィックス コンテキストにレンダリングします。
  3. ヒット テスト: マウスまたは表示されたキャレットを使用してテキストを正確に選択できるようにします。
  4. 必要に応じて、プリンターでできるだけ正確に結果を印刷します。注:これは二次的なものです。画面のレンダリングとヒット テストが主です。
  5. Windows XP 以降のオペレーティング システムで実行します。

グラフィックスと画像を同じグラフィックス コンテキストにレンダリングする WinForms アプリケーション内。

私たちが遭遇した4つのテクノロジーがあります。最初の 2 つを使用してみましたが、数か月にわたって説明されている問題に遭遇しました。

GDI+

解像度に依存しないとされるテキスト。ただし、この質問(およびその他の情報源) によると、この技術は品質の問題があるため避けるべきです。

MSDNは、Graphics.MeasureString を呼び出して 、正確な文字列測定値StringFormat.GenericTypographicを生成すると述べています。TextRenderingHint.AntiAliasしかし、私たちの経験と他の人の経験では、これは当てはまりません。正確な弦の測定値は得られません。

  • 長所:速い
  • 短所:弦の測定が不正確。

結果: 弦の測定が不正確なため使用できません。

TextRenderer 経由の GDI

これは、GDI+ の制限を克服するために導入されました。ただし、これには独自の制限が導入されました。

  • 非常に遅い
  • グラフィック変換では機能しませ

結果: これらの理由により使用不可

p/invoke 経由の GDI

GetTextExtentExPointテキストの測定とDrawText/ DrawTextEx/ExtTextOutレンダリングの呼び出し。

これはまだ試していません。

ダイレクトライト

これは、GDI/GDI+ を含む他のテクノロジと相互運用できるため、有望に思えます。おそらく、グラフィックス レンダリングの残りの部分は変更されないでしょう。ただし、Windows Vista 以降の Windows バージョンでのみ使用できます。Windows XP には依然としてかなりのインストール ベースがあるため、これは現在問題になっています。

質問

要件を考慮して、これらのテクノロジのうちどれを機能させることができますか?

注: このトピックについては多くの誤った情報が飛び交っているため、この分野の専門知識がある場合にのみ、この質問に回答してください。また、WPF を提案しないでください。これは、使用を検討しているものではありません。