Вы получите наиболее точное масштабирование, нарисовав отдельное изображение, а затем добавив это изображение к исходному. Вы сделали бы это следующим образом:
- Создание растрового изображения в памяти с достаточным пространством
- Нарисуйте текст на этом растровом изображении шрифтом по умолчанию
- Нарисуйте изображение, содержащее текст, на оригинальном изображении, масштабируя его до нужного вам размера
Код:
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);
Обратите внимание на последнюю строку и Rectangle
параметры. Используйте их для масштабирования вашего текстового растрового изображения на исходное изображение. Кроме того, вы также можете выбрать метод Graphics.MeasureString
, чтобы определить, насколько широким будет ваш текст, и делать попытки, пока не получите лучший из возможных.
- Используйте Graphics.MeasureString () , чтобы измерить размер вашей строки на изображении
- Уменьшить / увеличить шрифт, шаг за шагом соответственно
Как вы и просили в комментарии, я дам вам более подробное предложение здесь. Скажем, исходная ширина изображения - WI1, а ширина текста на нем с использованием Graphics.MeasureString
- WT1. Если вы измените размер изображения до ширины WI2, то ваша идеальная ширина текста будет WT2 = WT1 * WI2 / WI1
. Используя метод DrawText
, вы не сможете получить точную ширину, потому что при увеличении шрифта на 1 он может перепрыгнуть через это значение. Таким образом, вы должны сделать несколько попыток и найти лучшее. Выберите размер шрифта, если получающаяся ширина текста меньше (измерьте с помощью MeasureString), увеличивайте его до тех пор, пока он не станет больше целевого, и вы получите близкое соответствие. То же самое происходит, если он слишком большой. Уменьшить шрифт шаг за шагом.
Это быстро и грязно, как вы видите, потому что у вас много дро, но я не могу придумать лучшего решения, если вы не используете моноширинные шрифты.
Разница между этими решениями заключается в том, что сначала вы можете получить текст, соответствующий размеру, который вам нужен, но вы, вероятно, потеряете некоторую читаемость шрифта из-за масштабирования. Второе решение даст хорошую читабельность, но вы не можете получить идеальный размер текста в пикселях.