你会在各个独立的图像绘制得到最精确的比例然后将该图像拍打到原始图像上。你会做如下:
- 创建的内存位图有足够的空间
在您的默认字体是位图
- 绘制文本
通过将其扩展到尺寸包含文本到原始图像
- 绘制图像你需要
代码:最后一行与的
Bitmap textBmp = new Bitmap(100, 100);
Graphics textBmpG = Graphics.FromImage(textBmp);
textBmpG .DrawString("test 1", new Font(FontFamily.GenericSansSerif, 16), Brushes.Red, new PointF(0, 0));
Graphics origImgG = Graphics.FromImage(originalImg);
origImgG.DrawImage(textBmpG, new Rectangle(50, 50, 50, 50), new Rectangle(0, 0, 100, 100), GraphicsUnit.Pixel);
采取通知3210个参数。使用它们将文本位图缩放到原始图像上。或者,您也可以选择Graphics.MeasureString
方法来确定您的文本的宽度,并尝试尝试,直到您获得最佳效果。
- 使用Graphics.MeasureString()来衡量你的字符串将多大的图像上
- 减少/增加字体步步相应
正如你在评论要求我在这里给你更详细的建议。假设您的原始图像宽度为WI1,并且使用Graphics.MeasureString
的文本宽度为WT1。如果将图像调整为宽度WI2,那么您的完美文本宽度将为WT2 = WT1 * WI2/WI1
。使用DrawText
方法可能无法获得此确切宽度,因为当您将字体增加1时,它可能跳过该值。所以你必须做几次尝试并找到最好的。如果生成的文字宽度较小(使用MeasureString测量),选择一种字体大小,将其增大,直到它变得比目标大,并且您有最接近的匹配。同样的事情,如果它太大。逐步缩小字体。
这很快就很脏,因为您看到很多画图,但我想不出更好的解决方案,除非您使用等宽字体。
这些解决方案之间的区别在于,首先您可以获得符合您需要的精确大小的文本,但由于缩放,您可能会失去一些字体可读性。第二种解决方案会提供良好的可读性,但是无法获得像素完美的文本大小。
感谢您的支持。 – techno
如果我使用'Graphics.MeasureString()'来衡量要绘制的字符串的长度和宽度。请给我一个公式来计算要绘制的文本的大小取决于图像的大小。 – techno
我已经添加了对你有用的建议,以便获得正确的字体大小。请注意,没有确切的公式可以做到这一点,因为每个字符在字体中的宽度不同,而且不同字体的宽度相同。 –