1

提供された幅(ピクセル単位)に適合する文字列を取得する際に問題が発生しています。

たとえば、次のような文がある場合(JavaScriptで):

var mystring = "This is my sentence, I need to get just 50 pixels from it."

MeasureStringC#でメソッドを使用すると、幅を取得できます。

Font font = new Font("Segoe UI", 11, FontStyle.Regular, GraphicsUnit.Point);
SizeF size = graphics.MeasureString(mystring, font);

この文字列の幅が400pxであるが、サイトに表示できる最大幅が50pxであるとします。

文字列を短くして、幅が50ピクセル未満になるまで測定すると機能しますが、多くの反復が必要になるため、まったく適切な解決策ではありません

誰かがこれに対する良い解決策を持っていますか?

ありがとう。

4

5 に答える 5

1

最適な長さのバイナリ検索を使用すると、多くの反復は必要ありません。テキスト レンダリングの複雑さを考えると、それが最善の方法だと思います。各文字の幅を取得してそれらを合計することはできません。

于 2009-07-22T07:00:53.560 に答える
1
string myString = "This is my sentence, I need to get just 50 pixels from it."
Font font = new Font("Segoe UI", 11, FontStyle.Regular, GraphicsUnit.Point); 

int desiredWidth = 50;
int myStringWidth = TextRenderer.MeasureText(myString , font).Width;
string result = mystring.Substring(0, myString.Length * desiredWidth / myStringWidth);

このソリューションは、改行を考慮していません。

于 2011-03-14T07:43:29.113 に答える
1

このセクションに追加したい-「文字列を短くして、幅が50px未満になるまで測定すると...」

文字列の途中から二分探索を始めてみませんか。ここが初心者向けの場所です。ストリングの長さに関係なく、理想的な長さを見つけるのにかかる時間ははるかに短くなります。複雑さは、n から log(n) に減少します。

より良い結果を得るには、バイナリ検索を開始する前に、たとえば 500 文字など、文字列が非常に長い場合は文字列を切り詰めることができます。

于 2009-07-22T09:08:11.167 に答える