C#实现在图片上动态写内容

https://www.cnblogs.com/zhenzaizai/p/7910836.html

之前在项目上遇到这么一个需求,就是要在图片上写内容,而且要求是动态,我所谓的动态就是在图片上写的内容是动态的。网上找了找,很多人实现了网图片上写内容的功能,但是,并没有实现动态。所以在这里把我的解决办法跟大家分享一下。

  要实现这个功能,我分了两步来完成:

  一、在图片上放添加一个TextBox,输入框,而且这个输入框的位置是可以随意指定的。下边给大家上源码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

/// <summary>

/// 打开写字板

/// </summary>

private void Write()

{

    try

    {

        textBox1.Location = new Point(startPoint.X, startPoint.Y);//startPoint为鼠标当前点击的位置

        textBox1.BorderColor = SystemColors.Highlight;//设置textBox1的边框颜色

        textBox1.BorderStyle = BorderStyle.FixedSingle;//设置textBox1的边框样式。在这里需要注意,<br>                //这个textBox是我自定义的一个控件,可以修改它的边框颜色,为了效果,我加载的textBox1的边框是透明的

        textBox1.Font = new Font("宋体", 14.25F);//设置textBox1的默认字体跟大小

        textBox1.Multiline = true;//允许textBox1可以输入多行数据,这样设置textBox1的宽度才有效

        textBox1.Size = new Size(100, 50);//设置textBox1的大小

        picImage.Controls.Add(textBox1);//把它添加到一个pictrueBox上边

        textBox1.Focus();//让其获得焦点,可以直接输入。

        // textBox1.BringToFront();

    }

    catch (Exception)

    {

        throw;

    }

}       

   首先,我在程序里定义了一个TextBox并且初始化了。然后,我在这里对textBox1进行了一系列的设置,把它添加到pictrueBox上边。这样,实现这个功能的第一步就算完成了。加载textBox的目的就是为了实现动态写内容。

  二、读取textBox1的内容写到图片上边:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

/// <summary>

   /// 当按下回车键时,往图片上写字

   /// </summary>

   /// <param name="sender"></param>

   /// <param name="e"></param>

   private void WriteText()

   {

       if (textBox1.Text != null)

       {

           Graphics g = Graphics.FromImage(picImage.Image);//定义一个GDI+

           SolidBrush drawBrush = new SolidBrush(textBox1.ForeColor);//定义一个画笔,在这里我读取了textBox1的字体颜色

           Font drawFont = new Font(textBox1.Font.FontFamily, textBox1.Font.Size);//定义一个font,设置字的样式,大小,都是读取textBox1的值<br>         //往图片上写字。这里需要注意的是Point,因为在图片加载的时候你可能采取了一定的压缩或者放大,所以要乘以压缩比例scaling

           g.DrawString(textBox1.Text, drawFont, drawBrush, new Point(startPoint.X * scaling, startPoint.Y * scaling));

           picImage.Image.Save(fileName, ImageFormat.Jpeg);//最后就是图片保存了

           picImage.Controls.Remove(textBox1);//然后移除添加的那个textBox1

1

} }

   在这里还有一点需要注意,有些人可能是定义了一个Bitmap,然后把图片转换成Bitmap再往上写字的,这样其实没有必要,而且如果你这样做的话可能会改变图片原有的色彩模式。还有我这里是在输入文字后,按一下“Enter”键,完成了写字,在这里看不到因为我的程序是支持快捷键自定义的,所以这些功能我都写在快捷键注册那一块了。

  好了,一个简单的功能就算介绍完了。如果各位有什么不同的建议,欢迎留言!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值