帮助将多个字符串绘制到图像对象上

杰西

新成员
加入
2016年2月18日
消息
1
编程经验
1-3
大家好。我正在研究一个小的爱好项目,应该把文本转变为手写。通过我的意思是,它将采取您输入的任何文本并向它添加缺陷,除了小缺陷,它还将在单词之间变化和空白。

我已经有了点麻烦。

我认为,由于我需要改变间距和空格,我应该遍历输入的字符串并对每个单词进行修改。

这是我的代码:

C#:
 public Image DrawText(String text, Font font, Color textColor, Color backColor)
        {


            //first, create a dummy bitmap just to get a graphics object
            Image img = new Bitmap(1, 1);
            Graphics drawing = Graphics.FromImage(img);

            //measure the string to see how big the image needs to be
            SizeF textSize = drawing.MeasureString(text, font);

            //free up the dummy image and old graphics object
            img.Dispose();
            drawing.Dispose();

            //create a new image of the right size, currently adding width and height bc the method is not finished.
            img = new Bitmap((int)textSize.Width + 600, (int)textSize.Height + 600);

            drawing = Graphics.FromImage(img);

            //paint the background
            drawing.Clear(backColor);

            //create a brush for the text
            Brush textBrush = new SolidBrush(textColor);

            //set render mode
            drawing.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
            drawing.InterpolationMode = InterpolationMode.HighQualityBicubic;
            drawing.PixelOffsetMode = PixelOffsetMode.HighQuality;
            drawing.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

            StringFormat format = new StringFormat();
            
            // splitting the input string delimited by spaces
            string[] xx1 = text.Split(' ');
           
             // iterating through each word, and placing each word on to the image in sentences, paragraphs, etc.
            float totalwidth = 0;
            float totalheight = 0;
            foreach (string bee in xx1)
            {
                totalwidth = totalwidth + drawing.MeasureString(" " + bee + " ", font).Width;

                drawing.DrawString(bee, font, textBrush, totalwidth, totalheight);

                if ( (int)totalwidth > (int)img.Width )
                {
                    totalheight = totalheight + drawing.MeasureString(bee, font).Height;
                }
            }


            drawing.Save();

            textBrush.Dispose();
            drawing.Dispose();

            return img;

        }

在达到图像的长度之后,我已经在达到每行时添加了正确的高度。 (当字符/字符串的长度达到图像的长度时,我希望向下移动到下一行)否则文本将从图像的边缘运行而不可见。

除此之外,我难以让单词之间的间距是正确的,并且我对此为什么也会丢失。任何帮助,将不胜感激!谢谢你。 :)
 

新成员
加入
2016年3月8日
消息
3
编程经验
3-5
看看StringFormat类。
//msdn.microsoft.com/en-us/library/system.drawing.stringformat(v=vs.110).aspx

设置要满足您需求的属性,并将StringFormat对象传递给Graphics.DrawString方法。它将为您处理所有间距。
C#:
DrawString([String], [Font], [Brush], [PointF], [StringFormat])

它看起来你试图使用它,但你还没有将它应用于你的代码。

如果您需要进一步的帮助,请告诉我。
 
最佳 底部