【发布时间】:2015-10-20 00:49:50
【问题描述】:
如果我的程序未激活,我需要向图像添加文本。此文本应填满整个图像。它还应该根据需要包装和缩放以适合图像。
我找到了很多可行的解决方案来添加这个缩放到图像大小的文本。但在任何情况下,它都只是一行文本,因此也不会像我想要的那样换行。
如何根据图片大小设置字体大小并使用自动换行?
编辑: 这是一个 winform 应用程序。
编辑 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();
【问题讨论】:
-
您没有提及您正在制作的应用程序是什么?赢取表格、Web 应用程序、移动应用程序,...?为什么不直接创建一个可以缩放到您需要的任何大小的默认图像?
-
抱歉,这是一个 winforms 应用程序。
-
我不使用默认图像,因为目标图像的宽高关系不同,所以默认图像上的文字会被拉伸或者如果我将默认图像居中,不会覆盖整个图像
-
还有一件事需要澄清,你说你想让文本填满整个图像。您是否希望字体大小缩放以适应空间,或者如果超出宽度,您是否希望文本中断?还是您想根据可用空间生成开始“*”并以这种方式填充?您可以像现在一样将单行文本居中并用单一颜色填充背景或添加边框以模仿图像的大小。
-
是的,我想要缩放字体大小。找到了解决方案,没问题我也想让文字停下来。找到了解决方案,没问题