問題タブ [drawstring]

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 に答える
18303 参照

pdf - PdfSharp: テキストの高さ/配置の問題

XTextFormatter を使用するかどうかに関係なく、LayoutRectangle の高さが 0 である必要があるなどの同じエラーが発生します。

fontStyleは System.Drawing.FontStyle 型です foreColourは System.Drawing.Color 型ですOrientation = Landscape、Size = LetterのPdfPageから_gfxを既に定義していますxPosおよびyPosは double 型のパラメーターであり、xLimitおよびyLimitと同じです。


LayoutRectangle の高さはゼロ (0) でなければならないというランタイム エラーが発生します...


定義によれば、長方形は高さを持つことを意味します。それ以外の場合は、線と呼びます! 理解できません!...

XGraphics.DrawString()メソッドを直接試してみましたが、同じエラーが発生します。LayoutRectangle を使用できないようですが、テキストが目的の領域に手動で収まるように管理する必要があります。

yPos 変数の値はまったく同じ値ですが!

*yPos = Page.Height * .4093、ページの高さの 40,93%。*

ここに私がやろうとしていることの例があります:

"こんにちは世界!" "こんにちは世界!"

そして、ここに私が得るものがあります:

"こんにちは世界!"

また、印刷領域の制限やフォント サイズ、フォント スタイルが異なるため、正しい数のスペースを含む単純な 1 つの文にこれらを書き込めません。

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

c++ - イメージを透明なビットマップに描画すると、文字の周りに黒い境界線が表示されます

最初に透明なビットマップに文字列を描画し、次に A を宛先キャンバスに描画する必要があります。ただし、特定のケースでは、文字の周りに黒い枠が表示されます。

desGr の文字描画には、一部のフォントサイズ用のブラック ボードがあります。

この問題を回避するにはどうすればよいですか? どうもありがとう!

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

java - JavaでdrawStringを使用して行と列を書き込むにはどうすればよいですか

私が得るのは、35x30 (プログラムの別の部分の行と列の変数) の黄色い四角だけです。「×」が全く見えません。col+10、row+10 ですべてマッシュアップされた場合に備えて、スペースを空けようとしましたが、影響はありません。同じ効果で列と行を切り替えました。

ありがとうございました。

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

.net - ワードラップが制御されたグラフィックドローストリング

基本的に私の問題は、必要なときに文字列をワードラップする必要があることです。.NET が必要な場合ではありません。DrawString メソッドは、描画する四角形を指定すると自動的にワード ラップされることを理解しています。いつワードラップするかを制御する必要があります。たとえば、描画したい文字列が Testing 1234 であるとしましょう。また、スペースが表示されるたびに新しい行にテキストを描画したいと考えています。したがって、この場合、Testing と 1234 の 2 行になります。文字列のサイズ変更 (境界に合わせて) と、各行を描画するための複数のドローストリング メソッド呼び出しの組み合わせが必要だと推測しています。問題は、これを行う方法が本当にわからないことです。GDI+に関しては初心者です。

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

.net - .NET DrawString で行を折り返すときにワード ブレークを無効にする

限られたスペースに文字列を描画するために .NET を使用しています。弦はできるだけ太くしたい。文字列がより多くの行に分割されても問題はありません(長方形内にある場合)。問題は、.NET が単語の途中で文字列を別の行に分割することを望まないことです。たとえば、文字列 "Test" は大きなフォントで 1 行に印刷されます。文字列 "Testing" は小さなフォントで 1 行に印刷する必要があり (1 行に "Testi" と別の行に "ng" ではなく)、文字列 "Test Test" はかなり大きなフォントで 2 行に印刷する必要があります。

私の言葉を破らないように .NET を制限する方法について、誰かアイデアがありましたか?

現在、次のようなコードを使用しています。

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

java - Java Graphics2D DrawString

ここで少し問題があります。文字列を描いているパネルがあります。これはゲームなので、スコアを更新するためにスコアを再描画し続けます。しかし、もう一度描画すると、前のスコアの上に描画されるため、文字化けして見えます。これを修正する方法はありますか?

comp2d.drawString(GetScore(スコア),ScoreX,ScoreY);

0 投票する
5 に答える
4449 参照

gdi+ - Graphics.MeasureCharacterRangesが間違ったサイズ計算を行う

Webフォームアプリで画像の特定の部分にテキストをレンダリングしようとしています。テキストはユーザーが入力するので、バウンディングボックス内に収まるようにフォントサイズを変更したいと思います。

概念実証の実装でこれをうまく行っていたコードがありますが、現在、より大きなデザイナーからのアセットに対してそれを試しているため、奇妙な結果が得られています。

私は次のようにサイズ計算を実行しています:

次に、次の行を使用して、ファイルシステムからプルしている画像にテキストをレンダリングします。

どこ:

  • __fontsPrivateFontCollection
  • PrivateFontCollection.GetFontBySizeを返す拡張メソッドですFontFamily
  • RectangleF __textBoundingBox = new RectangleF(150, 110, 212, 64);
  • int __minimumSize = 8;
  • int __startingSize = 48;
  • Brush __brush = Brushes.White;
  • int size48から始まり、そのループ内で減少します
  • Graphics g持っSmoothingMode.AntiAliasTextRenderingHint.AntiAlias設定
  • contextは(これはのメソッドSystem.Web.HttpContextからの抜粋です)ProcessRequestIHttpHandler

他の方法は次のとおりです。

今、私は2つの問題を抱えています。

まず、テキストが単語内に改行を挿入して折り返すことを要求することがありますが、これはちょうど収まらず、whileループが再びデクリメントする必要がありますGraphics.MeasureCharacterRanges単語内でワードラップするべきではないのに、これがボックス内に収まると考える理由がわかりません。この動作は、使用されている文字セットに関係なく示されます(ラテンアルファベットの単語、およびキリル文字、ギリシャ文字、グルジア文字、アルメニア文字などのUnicode範囲の他の部分で取得します)。Graphics.MeasureCharacterRanges空白文字(またはハイフン)でのみワードラップするように強制するために使用する必要がある設定はありますか?この最初の問題は、ポスト2499067と同じです。

第二に、新しい画像とフォントサイズにスケールアップすると、Graphics.MeasureCharacterRanges高さが大幅にずれてしまいます。私が描いているのRectangleFは画像の視覚的に見える領域に対応しているので、テキストが必要以上にデクリメントされていることを簡単に確認できます。しかし、私がそれにいくつかのテキストを渡すとき、GetBounds呼び出しは私にそれが実際に取っているもののほぼ2倍の高さを与えています。

試行錯誤を使用し__minimumSizeて、whileループを強制的に終了するように設定すると、24ポイントのテキストがバウンディングボックス内に収まることがわかりますGraphics.MeasureCharacterRangesが、画像にレンダリングされたテキストの高さは122px(バウンディング時)であると報告されていますボックスの高さは64ピクセルで、そのボックス内に収まります)。実際、問題を強制することなく、whileループは18ptまで繰り返され、その時点で適切Graphics.MeasureCharacterRangesな値が返されます。

トレースログの抜粋は次のとおりです。

サイズが193×122で制限が212×64であるため、フォントサイズを24に
デクリメントします。サイズが191×117で制限が212×64であるため、フォントサイズを23に
デクリメントします。サイズが200×75で制限があるため、フォントサイズを22にデクリメントします。は212×64
フォントサイズを21にデクリメントします。サイズは192×71で制限は212×64
です。フォントサイズを20にデクリメントします。サイズは198×68で制限は212×64
です。フォントサイズを19にデクリメントします。サイズは185です。 ×65、制限は212×64
です。HESSELINKのVENNEGOORをDIN-Blackで18ptで書き込み、サイズは178×61、制限は212×64です。

では、なぜGraphics.MeasureCharacterRanges私に間違った結果を与えるのですか?たとえば、ループが21ポイント前後で停止した場合のフォントの行の高さは理解できますが(結果をスクリーンショットしてPaint.Netで測定すると、視覚的にフィットします)、本来よりもはるかに進んでいます。率直に言って、それは間違った気の結果を返しているからです。

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

.net - テキストに基づいて長方形のサイズを変更する

Rectangleを使用してデータを表示するカスタムコントロールに取り組んでいます。ここで、長方形の幅と高さが100に設定されているとします。

データ量が少ない場合は問題ありませんが、DrawStringメソッドを使用して描画させることができます。ただし、データが大きくなり、クリップされる場合があります。

MeasureStringメソッドを使用しようとしましたが、正しい値を取得できません。幅100ピクセルの長方形で表示する必要がある場合、文字列のサイズ[長さと高さの両方]を確認する方法はありますか。つまり、高さを増やすことはできますが、幅を増やすことはできません。そのため、文字列の正しい高さを使用して、その長方形に完全に表示されるようにすることができます。

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

java - Javaを使用してレシートプリンターに印刷するときのテキストの拡大を修正

Java Printableを実装し、コードをprintメソッドに配置することで、一部のEpsonレシートプリンターに印刷しています。プリンターにテキストを描画するには、Graphics2D.drawStringを使用します。また、他のプリンターに印刷するときにテキストサイズと比較する方法を確認するために、プリンターに長方形を描画しています。レセプションプリンターに印刷する場合、用紙のテキストは、レーザープリンターまたはXPSライター仮想印刷に印刷する場合の約2倍の幅になります。これは、JavaがGraphics2Dオブジェクトにテキストを描画する方法に問題がありますか?6update20の最新バージョンのJavaをインストールしています。

何を調べるべきかについてのアイデアは役に立ちます。

ありがとう。

ここで私が使用しているコード。この例では、XPSライターに送信するときに、rectの右端に文字「c」が表示されます。レシートプリンターに印刷すると、6はrectの右端にあり、テキストを確認できます。本来よりもはるかに広いです。rectは正しいサイズのようです。

ページと余白のサイズを変更しようとしましたが、テキストの問題が解決しないようです。これらの用紙サイズと余白は、MicrosoftWordがプリンターを自動検出する方法から得られました。Wordは、テキストをレシートプリンターに正しく印刷します。

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

c# - 文字の折り返しを伴う DrawString

C# を使用して、Windows Mobile アプリケーションの致命的なエラー ダイアログを作成しています。問題は、を使用してスタックトレースを描画しようとすると、文字の折り返しではなく単語の折り返しを使用DrawStringするため、スタックトレースの半分が切り取られることです。DrawString

説明が分からない方へ:

スタックトレースを描画すると、次のようになります。

そして、私はそれを次のように印刷したい:

これは Csharp で可能ですか?

問題の再現:

  1. 新しいスマート デバイス プロジェクトを作成します。(デバイスアプリケーション)

  2. Form1 コードを次のように置き換えます。

    }

  3. プロジェクトを実行します。