c# richBox内容转图片
1.自定义控件,继承richBox
public class RichTextBoxPrintCtrl : RichTextBox
{
//private const double anInch = 14.4;
private const double anInch1 = 150;
private const double anInch2 = 200;
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
[StructLayout(LayoutKind.Sequential)]
private struct CHARRANGE
{
public int cpMin; //First character of range (0 for start of doc)
public int cpMax; //Last character of range (-1 for end of doc)
}
[StructLayout(LayoutKind.Sequential)]
private struct FORMATRANGE
{
public IntPtr hdc; //Actual DC to draw on
public IntPtr hdcTarget; //Target DC for determining text formatting
public RECT rc; //Region of the DC to draw to (in twips)
public RECT rcPage; //Region of the whole DC (page size) (in twips)
public CHARRANGE chrg; //Range of text to draw (see earlier declaration)
}
private const int WM_USER = 0x0400;
private const int EM_FORMATRANGE = WM_USER + 57;
[DllImport("USER32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, Int32 msg, Int32 wParam, Int32 lParam); public int PrintImage(int nStartFrom, Graphics g)
{
RECT rcToPrint = default(RECT);
FORMATRANGE fr = default(FORMATRANGE);
IntPtr iptHdc = IntPtr.Zero;
IntPtr iptRes = IntPtr.Zero;
IntPtr iptParam = IntPtr.Zero;
// Calculate the area to render and print
rcToPrint.Top = 0;
rcToPrint.Bottom = (int)Math.Ceiling((g.VisibleClipBounds.Height * anInch2));
rcToPrint.Left = 0;
rcToPrint.Right = (int)Math.Ceiling((g.VisibleClipBounds.Width * anInch1));
iptHdc = g.GetHdc();
//Indicate character from to character to
fr.chrg.cpMin = nStartFrom;
fr.chrg.cpMax = -1;
//Use the same DC for measuring and rendering point at printer hDC
fr.hdc = fr.hdcTarget = iptHdc;
//Indicate the area on page to print
fr.rc = rcToPrint;
//Get the pointer to the FORMATRANGE structure in memory
iptParam = Marshal.AllocCoTaskMem(Marshal.SizeOf(fr));
Marshal.StructureToPtr(fr, iptParam, false);
//Send the rendered data for printing
iptRes = SendMessage(this.Handle, EM_FORMATRANGE, 1, iptParam.ToInt32());
//Free the block of memory allocated
Marshal.FreeCoTaskMem(iptParam);
//Release the device context handle obtained by a previous call
g.ReleaseHdc(iptHdc);
//Return last + 1 character printer
return iptRes.ToInt32();
}
}
2.引用imageText即是。
Bitmap imageText = new Bitmap(richTextBoxPrintCtrl1.Width, richTextBoxPrintCtrl1.Height);
Graphics g = Graphics.FromImage(imageText);
richTextBoxPrintCtrl1.PrintImage(0, g);
c# richBox内容转图片的更多相关文章
- PHP限制HTML内容中图片必须是本站的方法
本文实例讲述了PHP限制HTML内容中图片必须是本站的方法.分享给大家供大家参考.具体实现方法如下: 1. PHP代码如下: <?php $dom = new DOMDocument; $dom ...
- 将UIWebView显示的内容转为图片和PDF
今天开发MarkEditor时要用到将 UIWebView 中显示的内容转为图片,方便转发到各个社交网络(Twiiter,Facebook,Weibo),这样内容就不受长度限制,类似于长微博. 之前关 ...
- 为CKEDITOR内容中图片加上 图片服务器路径
做网站的时候,前台和后台是分开的, 用了CKEDITOR上传图片,但是发现内容带图片的时候,前台Web浏览的时候是一个红X,一看路径不对,上传的到数据库中的是相对的虚拟路径,例如:<img al ...
- 将PPT文件内容转换为图片放在Email邮件正文中发送
通过Email推送统计报告.一般除了要求将PPT报告文件作为附件发给用户,同时希望将报告内容在邮件中直观展示. 一份统计报告中经常包含柱状图.饼图.好看的图表,这些信息要直接在Email中展示比较复杂 ...
- python scrapy爬取知乎问题和收藏夹下所有答案的内容和图片
上文介绍了爬取知乎问题信息的整个过程,这里介绍下爬取问题下所有答案的内容和图片,大致过程相同,部分核心代码不同. 爬取一个问题的所有内容流程大致如下: 一个问题url 请求url,获取问题下的答案个数 ...
- Lodop导出图片,导出单页内容的图片
用如下语句设置图片的格式,设置导出的图片初识的默认名称,Lodop可以把打印内容导出成图片. LODOP.SET_SAVE_MODE("SAVEAS_IMGFILE_EXENAME" ...
- dedecms织梦手机端文章内容页图片不能自适应解决方法
dedecms织梦手机端文章内容页图片不能自适应解决方法: 方法一修改手机端文章页模板代码: 找到并打开手机端的文章内容页模板,将里面的{dede:field.body/}标签修改一下,改为如下的标签 ...
- android截屏:保存一个view的内容为图片并存放到SD卡
项目中偶尔会用到截屏分享,于是就有了下面这个截屏的方法~ 下面得saveImage()方法就是保存当前Activity对应的屏幕所有内容的截屏保存. private void saveImage() ...
- 基于内容的图片检索CBIR(Content Based Image Retrieval)简介
传统的图像检索过程,先通过人工对图像进行文字标注,再利用关键字来检索图像,这种依据图像描述的字符匹配程度提供检索结果的方法,简称“以字找图”,既耗时又主观多义.基于内容的图像检索客服“以字找图”方式的 ...
随机推荐
- js实现把textarea通过换行或者回车把多行数字分割成数组,并且去掉数组中空的值。
删除数组指定的某个元素 var msg = " "; //textarea 文本框输入的内容 var emp = [ ]; //定义一个数组,用来存msg分割好的内容 1. ...
- CSDN强制登录的解决办法
这个网站的吃相越来越恶心,最近使用发现他竟然强制登录了,这样的网站我是不可能登录的,要一大堆身份信息,但是,某些时候有需要看一些别人的文章怎么办呢, 似乎节操与便利必须选一个,还好CSDN这样的网 ...
- django 登录注册注销
一.设计数据模型 1.数据库模型设计 作为一个用户登录和注册项目,需要保存的都是各种用户的相关信息.很显然,我们至少需要一张用户表User,在用户表里需要保存下面的信息: 用户名 密码 邮箱地址 性别 ...
- laravel Eloquent ORM联合查询出现Class not found,就算在Moel中存在这个类
今天发现一个坑,在处理Eloquent ORM的联合查询时,一直报错Class 'AdminGroup' not found ,可是我的项目中明明存在这个类,如下 这是我的模型类: 它们的控制器方法: ...
- BurpSuite—-Scanner模块(漏洞扫描)
一.简介 Burp Scanner 是一个进行自动发现 web 应用程序的安全漏洞的工具.它是为渗透测试人员设计的,并且它和你现有的手动执行进行的 web 应用程序半自动渗透测试的技术方法很相似. 使 ...
- hello,Python
Python无疑是近年来程序语言届最闪亮的明星.2018年Python被TIOBE授予年度编程语言称号,在一月的排行榜中也雄踞第三位,打破了Java C C++长期以来所保持的三强局面 对比笔者以前学 ...
- Node.js 引用 gm 包错误 Error: Could not execute GraphicsMagick/ImageMagick
今天在学习前后台图像剪切时,下载了有图片剪切瑞士军刀之称的 GraphicsMagick. 给 gm.exe 配置了环境变量,在 npm 下好了 gm 的模块,但是运行却出现了错误. 错误如图: [E ...
- Freemarker入门(一)——入门与基本概述
1.概述 1.文档 完美的中文文档:http://freemarker.foofun.cn/ 2.是什么 FreeMarker是一个用Java语言编写的模板引擎.它基于模板来生成文本输出.Freema ...
- C语言 迭代部分的代码编写
C语言代码学习 迭代部分 迭代要用到函数部分的知识,一开始我写了计算n!的计算,代码和运行结果如下: 结果只能单一的计算出整数内的值,如果输入负值则结果为返回值1,显然是不对的,根据查书学习以后,知道 ...
- L018-课前练习以及知识巩固笔记
L018-课前练习以及知识巩固笔记 OK,今天课前做了几道题,算是对以往知识的巩固. 1.请描述下列路径的内容是做什么的?/etc/sysctl.conf/etc/rc.local/etc/hosts ...