2015-09-16 2 views
0

Мне нужно добавить текст к изображению, если моя программа не активирована. Этот текст должен заполнить все изображение. Он также должен обертывать и масштабироваться, чтобы соответствовать изображению по мере необходимости.C# Drawstring подходит для изображения с wordwrap

Я нашел много рабочих решений, чтобы добавить этот текст к размеру изображения. Но в каждом случае это только одна строка текста, и так не будет обертываться, как я этого хочу.

Как установить размер шрифта в зависимости от изображения и использовать wordwrap?

EDIT: Это приложение winforms.

EDIT 2: То, что я пытался сделать:

FileStream fs = new FileStream(this.MasterPath + @"\***\***\***\" + file.Name, FileMode.Open, FileAccess.Read); 
Image img = Image.FromStream(fs); 
fs.Close(); 
Bitmap b = new Bitmap(img); 
Graphics graphics = Graphics.FromImage(b); 

string text = "Some Text"; 
StringFormat stringFormat = new StringFormat(); 
stringFormat.Alignment = StringAlignment.Center; 
stringFormat.LineAlignment = StringAlignment.Center; 
Font font = new Font("Arial", 120, FontStyle.Regular, GraphicsUnit.Pixel); 
SolidBrush brush = new SolidBrush(Color.FromArgb(128, Color.Red)); 

Rectangle rec = new Rectangle(0, 0, b.Width, b.Height); 
float sy = (float)b.Height/(float)1240; //I used 1240 and 1844 because on an image with 
float sx = (float)b.Width/(float)1844; //this size the text had the right size 
graphics.ScaleTransform(sx, sy); 
graphics.DrawString(text, font, brush, rec, stringFormat); 

b.Save(this.MasterPath + @"\***\***\***\" + file.Name, img.RawFormat); 
img.Dispose(); 
b.Dispose(); 
+0

Вы не упомянули, что приложение, которое вы делаете? Win Forms, веб-приложение, мобильное приложение, ...? И почему бы вам просто не создать образ по умолчанию, который можно масштабировать до любого требуемого размера? – Oceans

+0

О, извините, это приложение winforms. –

+0

Я не использую изображение по умолчанию, потому что отношение между шириной и высотой целевого изображения отличается, поэтому текст на изображении по умолчанию будет растянут или если я сосредоточу изображение по умолчанию, не будет охватывать все изображение –

ответ

1

Это действительно грубая концепция сработает.

Я думаю, что самым простым решением было бы заменить графику на вашей форме элементом управления RichTextBox и просто отредактировать макет, чтобы он выглядел прозрачным.

Тогда вы могли бы использовать объясненное решение here (by @ blak3r), чтобы получить желаемый результат.


EDIT:
Если вы хотите из него изображение можно использовать следующий код:

Bitmap bmp = new Bitmap(richTextBox1.Width, richTextBox1.Height); 
Graphics g = Graphics.FromImage(bmp); 
g.CopyFromScreen(this.PointToScreen(richTextBox1.Location), new Point(0, 0), bmp.Size); 
bmp.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg); 
g.Dispose(); 
bmp.Dispose(); 
+0

Это было бы решением, если бы я хотел отображать изображение, но мне нужно сохранить изображение с текстом на нем и сделать много других вещей, например создавать эскизы и показать его на странице asp.net ... –

+0

Я добавил, как это сделать в моем ответе. – Oceans

+0

Но для этого я должен отображать изображение. Но я обрабатываю сотни изображений, и пользователь не должен ничего видеть. –