Всем привет!
Есть задача написать на картинке заголовок, сейчас реализовал вот так:
код:
...
// ТЕКСТ заголовок
ImageResizer.Plugins.Watermark.ImageLayer y = new ImageResizer.Plugins.Watermark.ImageLayer(c); //ImageLayer needs a Config instance so it knows where to locate images
string title = BL.Title;
t.Text = TextWrap(title, 38);
t.Fill = false;
t.Align = System.Drawing.ContentAlignment.MiddleCenter;
wp.NamedWatermarks["img"] = new ImageResizer.Plugins.Watermark.Layer[] { y };
wp.NamedWatermarks["text"] = new ImageResizer.Plugins.Watermark.Layer[] { t };
...
public string TextWrap(string myString, int n)
{
// int n - количество cимволов для строки (ширина картинки)
int length = myString.Length;
char[] arrayOfSimbols = myString.ToCharArray();
myString = "";
for (int i = 0; i < length / n; i++)
{
foreach (char z in arrayOfSimbols.Skip(i * n).Take(n).ToArray())
myString += z;
myString += Environment.NewLine;
}
//остаток прибавим в конец
foreach (char x in arrayOfSimbols.Skip(arrayOfSimbols.Count() - arrayOfSimbols.Count() % n).ToArray())
myString += x;
return myString;
}
как видно с скрина переносы делаются очень не корректно, возможно весь этот алгоритм переноса не подходит или как то поправить нужно. Я уже думал может делить заголовок на три, только не посимвольно делить а по словам... и каждую часть писать с новой строки... но если строка будет сильно длинная или сильно короткая тоже борода может быть....
Может у кого опыт в этом есть, буду благодарен за подсказку.
UPD:
спасибо, получилось проще чем думал
public string TextWrap(string myString, int LengthRow)
{
int CurrentLengthRow = 0;
string ReadyRezult = "";
string [] TextArr = myString.Split(' ');
foreach (string Word in TextArr)
{
if( (CurrentLengthRow) + (Word.Length) < LengthRow)
{
ReadyRezult += Word + " ";
CurrentLengthRow += (Word.Length) + 1;
}
else
{
ReadyRezult += Environment.NewLine;
CurrentLengthRow = 0;
}
}
return ReadyRezult;
}