热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c#richtextbox转html,C#RichTextBox输入内容转自定义样式图像

此类功能网上很多例子,但转换效果极差,基本看不成。最近用到了这项功能,就写了一个示例。本示例可将rtf内部文字和标准图像转换为自己可以设定

此类功能网上很多例子,但转换效果极差,基本看不成。最近用到了这项功能,就写了一个示例。

本示例可将rtf内部文字和标准图像转换为自己可以设定的字体效果和大小的图像。

21a995e9cca9502d7e4d0bb5815d52af.png

原理:

在自定义的RichTextBox组件输入文字和图像,对每个文字和图像建立坐标和内容

图像:

public class ImageStruct

{

public Point Img_Point;

public int Img_Location;

public Bitmap Img;

public ImageStruct(Point _point, int _location, Bitmap _img)

{

Img_Point = _point;

Img_Location = _location;

Img = _img;

}

}

public List ImageList = new List();

文字:

public class ContentStruct

{

public Point Content_Point;

public string Content_Text;

public ContentStruct(Point _point, string _text)

{

Content_Point = _point;

Content_Text = _text;

}

}

public List ContentList = new List();

转换时,在程序内部建立一个临时的RichTextBox组件(自定宽度,高度会自动计算),装入输入内容,

并计算自适应宽度和高度,然后取得临时RichTextBox内部文字、图像坐标,在一副bitmap上按照坐标绘制文字和图像。

绘制文字使用SQK_Ui.DLL,源码在http://www.haolizi.net/example/view_14426.html,修改源码可调节文字阴影透明度等,

也可以自行搜索DrawStrng用法。

///

/// Rtf 转 图像

///

/// Rtf 内容

/// 图像宽度

/// 每个中文文字的宽度

/// 每个英文文字的宽度

/// 包含的固定样式图像的大小-宽度高度相同

/// 文字的颜色

///

private Bitmap RtfToBitmap (string Rtf_Message, int _width, int ch_Width, int en_Width, int img_Width, Color TextColor)

{

RichTextEx Rich_tmp = new RichTextEx() // 临时Richbox 取得全部内容,重新设置字体

{

WordWrap = true,

ScrollBars = RichTextBoxScrollBars.None,

BorderStyle = BorderStyle.None,

Height = 10

};

Rich_tmp.Rtf = Rtf_Message;

Rich_tmp.SelectAll();

Rich_tmp.SelectionColor = Color.FromArgb(255, 255, 255);

Rich_tmp.SelectionFont = font;

int havePic = Regex.Matches(Rich_tmp.Rtf, "Paint.Picture").Count; // 取得包含图像的数量

MatchCollection haveTxt = Regex.Matches(Rich_tmp.Text, @"[\u4e00-\u9fa5]", RegexOptions.IgnoreCase | RegexOptions.Singleline); // 取得包含中文的数量

int haveEn = Rich_tmp.Text.Length - haveTxt.Count; // 取得英文、数字、符号的数量

if ((haveTxt.Count * ch_Width havePic * img_Width haveEn * en_Width) > _width) // 超过限定宽度,为设定的宽度

{

Rich_tmp.Width = _width;

}

else // 没超过限定,为实际宽度

{

Rich_tmp.Width = haveTxt.Count * ch_Width havePic * img_Width haveEn * en_Width;

}

CSetLineSpace.SetLineSpace(Rich_tmp, 390); // 设定行间距

Rich_tmp.updata(); // 刷新

if (Rich_tmp.Lines.Length > 1) //如果有多行,获取行字数最多数的行,设置为图像宽度

{

RichTextEx Rich_branch = new RichTextEx()

{

WordWrap = true,

ReadOnly = true,

BorderStyle = BorderStyle.None,

ScrollBars = RichTextBoxScrollBars.None,

Text = Rich_tmp.Text

};

for (int t = 0; t

{

Rich_branch.Text = Rich_branch.Text.Remove(Rich_tmp.ImageList[t].Img_Location, 1);

Rich_branch.Text = Rich_branch.Text.Insert(Rich_tmp.ImageList[t].Img_Location, "♐");

}

MatchCollection haveZh, haveImg;

int maxlen = 0, exchange;

for (int i = 0; i

{

haveZh = Regex.Matches(Rich_branch.Lines[i], @"[\u4e00-\u9fa5]", RegexOptions.IgnoreCase | RegexOptions.Singleline); // // Rtf内部中文数量

haveImg = Regex.Matches(Rich_branch.Lines[i], @"♐", RegexOptions.IgnoreCase | RegexOptions.Singleline); // Rtf内部图像的数量

exchange = (Rich_branch.Lines[i].Length - haveZh.Count - haveImg.Count) * en_Width haveZh.Count * ch_Width haveImg.Count * img_Width; // // Rtf内部英文、符号数量

if (exchange > _width)

{

maxlen = _width;

break;

}

if (maxlen

}

Rich_tmp.Width = maxlen;

Rich_branch.Dispose();

}



推荐阅读
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 最详尽的4K技术科普
    什么是4K?4K是一个分辨率的范畴,即40962160的像素分辨率,一般用于专业设备居多,目前家庭用的设备,如 ... [详细]
  • 单片机入门指南:基础理论与实践
    本文介绍了单片机的基础知识及其应用。单片机是一种将微处理器(类似于CPU)、存储器(类似硬盘和内存)以及多种输入输出接口集成在一块硅片上的微型计算机系统。通过详细解析其内部结构和功能,帮助初学者快速掌握单片机的基本原理和实际操作方法。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • 本文探讨了如何通过编程手段在Linux系统中禁用硬件预取功能。基于Intel® Core™微架构的应用性能优化需求,文章详细介绍了相关配置方法和代码实现,旨在帮助开发人员有效控制硬件预取行为,提升应用程序的运行效率。 ... [详细]
  • 在Android开发中,当TextView的高度固定且内容超出时,可以通过设置其内置的滚动条属性来实现垂直滚动功能。具体来说,可以通过配置`android:scrollbars="vertical"`来启用垂直滚动,确保用户能够查看完整的内容。此外,为了优化用户体验,建议结合`setMovementMethod(ScrollerMovementMethod.getInstance())`方法,使滚动操作更加流畅和自然。 ... [详细]
author-avatar
荣清右
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有