我该如何把一幅图片插入到C# .NET控件中的RichTextBox,同时还能把该图片的id或者名字嵌入进去? 本帖最后由 seasonhdyy 于 2013-04-10 23:31:24 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我有个思路.首先我用的是RIchtetbox.我把他重写了可以显示GIF图片,/// <summary> /// 添加一个文件资源到RTF数据 /// </summary> /// <param name="p_FileFullPath">文件路径</param> public void AddFile(string p_FileFullPath) { int i = p_FileFullPath.LastIndexOf(@"\"); string dasdasd = p_FileFullPath.Substring(i, p_FileFullPath.Length - i); dasdasd = dasdasd.Substring(1, dasdasd.Length - 2); dasdasd = dasdasd.Replace("-", ""); dasdasd = dasdasd.Substring(0, dasdasd.Length - 3).ToUpper(); byte[] _FileBytes = File.ReadAllBytes(p_FileFullPath); Image _Image = Image.FromStream(new MemoryStream(_FileBytes)); string _Guid = BitConverter.ToString(Guid.NewGuid().ToByteArray()).Replace("-", ""); StringBuilder _RtfText = new StringBuilder(@"{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}\uc1\pard\lang2052\f0\fs18{\object\objemb{\*\objclass Paint.Picture}");// int _Width = _Image.Width * 15; int _Height = _Image.Height * 15; _RtfText.Append(@"\objw" + _Width.ToString() + @"\objh" + _Height.ToString()); _RtfText.AppendLine(@"{\*\objdata"); _RtfText.AppendLine(@"010500000200000007000000504272757368000000000000000000" + BitConverter.ToString(BitConverter.GetBytes(_FileBytes.Length + 20)).Replace("-", "")); _RtfText.Append("7A676B65" + dasdasd);//标记 //_RtfText.Append("7A676B65" + _Guid); _RtfText.AppendLine(BitConverter.ToString(_FileBytes).Replace("-", "")); _RtfText.AppendLine(@"0105000000000000}{\result{\pict\wmetafile0}}}}"); base.SelectedRtf = _RtfText.ToString(); }这个是代码.就是显示GIF用的.其中有一段使用到了GUID的这个.唯一标识.我就让图片的名称变成唯一标识符号.这样.在rtf中就可以直接获取"7A676B65"后面的32位就是图片的名称.在稍微处理下加上'-' .gif 就出来了图片的名称.我想了几天才想到 的哦.亲.有什么我没说清楚的就问我.我就不能提供详细的代码给你了,因为我也是一个小菜鸟.只是想到了思路. 用JQ来套一个div层不知道行不行 关键在于要插进RTF格式里面,并且还能正确读取出来。同时不能牺牲太多的系统资源。而RichTextBox控件会对插进去的内容进行过滤。不懂的参数它就自动抛弃,导致了插图片和ID进去再读取出来,就只能读出图片而不能读出ID了。 这个我没试过,不过我现在主要愁的是在RichTextBox中对RTF格式的字符串的自定义的操作。毕业设计就差点毁在这上面了 这个我看了一下,我觉得既然使用了object对象,还没准儿能把参数保留下来。是个很好的思路。不过早过了我毕业设计完成的时间了呵呵~···希望后面能有谁来研究一下。我最后还是采用了牺牲像素点的方式。最近在弄一个论坛帖子自动下载器。这方面也就开始落下了。谢谢~ 关于两个版本数据库的连接 请高手指教,偶想学学计算机安全/入侵方面的东东 C#退出调试很卡 关于API 怎样根据for循环次数定义变量 关于flex grid的中,单击,双击的问题!!!!!!! 各位DX,我如何在Datagrid中设置某一列的宽度?如何合并某一列? .net + 水晶报表 制作安装程序时候没有license.msm 模块。 devexpress winform chartcontrol X点多问题 同一个命名空间的不同类里面,可以用同名的字段吗? 网页自动登录数据填写,弹出登录窗口窗口数据的获取 异步http超时问题
/// 添加一个文件资源到RTF数据
/// </summary>
/// <param name="p_FileFullPath">文件路径</param>
public void AddFile(string p_FileFullPath)
{
int i = p_FileFullPath.LastIndexOf(@"\");
string dasdasd = p_FileFullPath.Substring(i, p_FileFullPath.Length - i);
dasdasd = dasdasd.Substring(1, dasdasd.Length - 2);
dasdasd = dasdasd.Replace("-", "");
dasdasd = dasdasd.Substring(0, dasdasd.Length - 3).ToUpper();
byte[] _FileBytes = File.ReadAllBytes(p_FileFullPath);
Image _Image = Image.FromStream(new MemoryStream(_FileBytes));
string _Guid = BitConverter.ToString(Guid.NewGuid().ToByteArray()).Replace("-", "");
StringBuilder _RtfText = new StringBuilder(@"{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}\uc1\pard\lang2052\f0\fs18{\object\objemb{\*\objclass Paint.Picture}");//
int _Width = _Image.Width * 15;
int _Height = _Image.Height * 15;
_RtfText.Append(@"\objw" + _Width.ToString() + @"\objh" + _Height.ToString());
_RtfText.AppendLine(@"{\*\objdata");
_RtfText.AppendLine(@"010500000200000007000000504272757368000000000000000000" + BitConverter.ToString(BitConverter.GetBytes(_FileBytes.Length + 20)).Replace("-", ""));
_RtfText.Append("7A676B65" + dasdasd);//标记
//_RtfText.Append("7A676B65" + _Guid);
_RtfText.AppendLine(BitConverter.ToString(_FileBytes).Replace("-", ""));
_RtfText.AppendLine(@"0105000000000000}{\result{\pict\wmetafile0}}}}");
base.SelectedRtf = _RtfText.ToString();
}这个是代码.就是显示GIF用的.其中有一段使用到了GUID的这个.唯一标识.我就让图片的名称变成唯一标识符号.这样.在rtf中就可以直接获取"7A676B65"后面的32位就是图片的名称.在稍微处理下加上'-' .gif 就出来了图片的名称.我想了几天才想到 的哦.亲.有什么我没说清楚的就问我.我就不能提供详细的代码给你了,因为我也是一个小菜鸟.只是想到了思路.