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

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

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

  1. /// <summary>
  2. /// 打开写字板
  3. /// </summary>
  4. private void Write()
  5. {
  6. try
  7. {
  8. textBox1.Location = new Point(startPoint.X, startPoint.Y);//startPoint为鼠标当前点击的位置
  9. textBox1.BorderColor = SystemColors.Highlight;//设置textBox1的边框颜色
  10. textBox1.BorderStyle = BorderStyle.FixedSingle;//设置textBox1的边框样式。在这里需要注意,
    //这个textBox是我自定义的一个控件,可以修改它的边框颜色,为了效果,我加载的textBox1的边框是透明的
  11. textBox1.Font = new Font("宋体", 14.25F);//设置textBox1的默认字体跟大小
  12. textBox1.Multiline = true;//允许textBox1可以输入多行数据,这样设置textBox1的宽度才有效
  13. textBox1.Size = new Size(100, 50);//设置textBox1的大小
  14. picImage.Controls.Add(textBox1);//把它添加到一个pictrueBox上边
  15. textBox1.Focus();//让其获得焦点,可以直接输入。
  16. // textBox1.BringToFront();
  17. }
  18. catch (Exception)
  19. {
  20. throw;
  21. }
  22. }

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

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

  1.      /// <summary>
  2. /// 当按下回车键时,往图片上写字
  3. /// </summary>
  4. /// <param name="sender"></param>
  5. /// <param name="e"></param>
  6. private void WriteText()
  7. {
  8. if (textBox1.Text != null)
  9. {
  10. Graphics g = Graphics.FromImage(picImage.Image);//定义一个GDI+
  11. SolidBrush drawBrush = new SolidBrush(textBox1.ForeColor);//定义一个画笔,在这里我读取了textBox1的字体颜色
  12. Font drawFont = new Font(textBox1.Font.FontFamily, textBox1.Font.Size);//定义一个font,设置字的样式,大小,都是读取textBox1的值
             //往图片上写字。这里需要注意的是Point,因为在图片加载的时候你可能采取了一定的压缩或者放大,所以要乘以压缩比例scaling
  13. g.DrawString(textBox1.Text, drawFont, drawBrush, new Point(startPoint.X * scaling, startPoint.Y * scaling));
  14. picImage.Image.Save(fileName, ImageFormat.Jpeg);//最后就是图片保存了
  15. picImage.Controls.Remove(textBox1);//然后移除添加的那个textBox1
  1. } }

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

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

C#实现在图片上动态写内容的更多相关文章

  1. java实现在图片上编辑文本内容

    package com.yin.text; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; impor ...

  2. winform PictureBox图片上动态添加Label或其他控件

    效果图: 代码: //分页或者多次加载时,需要删除之前产生的lable等控件 ; tabID < ; tabID++) { foreach (Control control in this.ta ...

  3. C#实现在图片上斜着写字

    最近公司要搞微信活动页面,要实现图片上可以写自己名字的功能,于是就查了一下怎么实现,下面贴一下代码备忘,希望大家也能用到: 我是在控制台应用程序里进行试验的. using (Image bitmap ...

  4. 函数putText()在图片上写文字

    #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace c ...

  5. 【咸鱼教程】本地图片上传。动态GIF表情图生成

    本案例参考:http://emoji.decathlon.trustingme.cn/但是实现方式不一样. 教程目录一 head first二 打开本地图片功能三 拖拽和缩放手势,调整图片四 gifj ...

  6. thinkphp 利用GD库在图片上写文字

    <?php /** * Created by PhpStorm. * User: Administrator */ namespace Home\Event; use \Think\Image; ...

  7. ASP.NET MVC应用程序把文字写在图片上

    原文:ASP.NET MVC应用程序把文字写在图片上 Insus.NET实现这篇<MVC把随机产生的字符串转换为图片>http://www.cnblogs.com/insus/p/3624 ...

  8. 1.关于QT中的Graphics绘图,定时器,动画,将窗口中的内容打印到图片上,打印机,打印预览

     1 新建项目 A  修改pro中的内容如下: HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gui widgets prints ...

  9. 使用Qpaint在图片上写文字

    开发过程中需要实现在图片上叠加文字,可以采用Qpaint在图片上写文字,然后将图片显示在上面.再将Qlabel加到Qwidget中.效果如下 //创建对象,加载图片 QPixmap pix; pix. ...

随机推荐

  1. Dreamweaver 调字体大小

    编辑--首选参数--字体 这里是指调代码字体的大小,就是为了编码时看的清楚些

  2. swift - 代码创建 pickerView 显示或隐藏横线

    import UIKit class VC1: UIViewController { fileprivate lazy var pickerV : UIPickerView = { let v = U ...

  3. [leetcode]29. Divide Two Integers 两整数相除

    Given two integers dividend and divisor, divide two integers without using multiplication, division ...

  4. springmvc将处理后的数据通过get方法传给页面时,可能会出现乱码。下面对于get请求中文参数出现乱码提出解决办法。

    对于get请求中文参数出现乱码解决办法有两个: 1.修改tomcat配置文件(tomcat--->conf--->server.xml)添加编码与工程编码一致,如下: <Connec ...

  5. DataTableExtensions

    public static class DataTableExtensions { public static List<dynamic> ToDynamic(this DataTable ...

  6. IIS 6.0/7.0/7.5、Nginx、Apache 等服务器解析漏洞总结

    IIS 6.0 1.目录解析:/xx.asp/xx.jpg  xx.jpg可替换为任意文本文件(e.g. xx.txt),文本内容为后门代码 IIS6.0 会将 xx.jpg 解析为 asp 文件. ...

  7. 如何配置Notepad++的C_C++语言开发环境

    相信很多人用notepad++,但把其配置成为C/C++还是需要小折腾一下的.本人在网上找了很长时间,也没有一个统一的答案,而且很多人说的方法根本不管用,而且也不够通用,所以还是自己摸索了一下,分享给 ...

  8. mysql简单实现查询结果添加序列号的方法

    方法1: SELECT @rownum :=@rownum + 1 AS rownum, t.* FROM integral_system_user t, (SELECT @rownum := 0) ...

  9. JVM家族史考【转】

    说起Java虚拟机,许多Java程序员都会潜意识地把它与Sun(虽然太阳已然西落,但永远值得被记忆) HotSpot虚拟机等同看待,也许还有一些程序员会注意到BEA JRockit和IBM J9,但大 ...

  10. Jmeter从一个Reply Message中获取N个参数的值,然后根据这个参数对后面的操作循环N次(ForEach Controller的用法)

    假设Reply Message是这样的: <root><result code="0" msg="success" /><m k= ...