Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
529 views
in Technique[技术] by (71.8m points)

system.drawing - Justifying text using DrawString in C#

I'm drawing text on a System.Drawing.Graphics object. I'm using the DrawString method, with the text string, a Font, a Brush, a bounding RectangleF, and a StringFormat as arguments.

Looking into StringFormat, I've found that I can set it's Alignment property to Near, Center or Far. However I haven't found a way to set it to Justified. How can I achieve this?

Thank you for your help!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

I FOUND IT :)

http://csharphelper.com/blog/2014/10/fully-justify-a-line-of-text-in-c/

in brief - you can justify text in each separate line when you know the given width of the entire paragraph:

float extra_space = rect.Width - total_width; // where total_width is the sum of all measured width for each word
int num_spaces = words.Length - 1; // where words is the array of all words in a line
if (words.Length > 1) extra_space /= num_spaces; // now extra_space has width (in px) for each space between words

the rest is pretty intuitive:

float x = rect.Left;
float y = rect.Top;
for (int i = 0; i < words.Length; i++)
{
    gr.DrawString(words[i], font, brush, x, y);

    x += word_width[i] + extra_space; // move right to draw the next word.
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...