社区
C#
帖子详情
如何通过编程的方式把客户区的内容保存到BMP图片(或其它图片)中去?
zengkun100
2005-08-18 10:37:03
我对GDI+不怎么熟悉,其实对GDI也不怎么熟悉.
目前遇到的问题是需要把winform应用程序客户区的内容保存到BMP图片中去,我知道可以新建一个与客户区一样大小的图片,然后再把客户区上的内容重新向图片里画一遍就OK了,可是那样的话当客户区的内容很多的时候就会慢了。有没有什么比较直接和快速的方法?
请各位高手指点!
...全文
253
5
打赏
收藏
如何通过编程的方式把客户区的内容保存到BMP图片(或其它图片)中去?
我对GDI+不怎么熟悉,其实对GDI也不怎么熟悉. 目前遇到的问题是需要把winform应用程序客户区的内容保存到BMP图片中去,我知道可以新建一个与客户区一样大小的图片,然后再把客户区上的内容重新向图片里画一遍就OK了,可是那样的话当客户区的内容很多的时候就会慢了。有没有什么比较直接和快速的方法? 请各位高手指点!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chinasdp
2005-10-26
打赏
举报
回复
private void ToBmp(Control control, string filename)
{
//创建显示器的DC
IntPtr dc1 = CreateDC ( "DISPLAY" , null , null , ( IntPtr ) null ) ;
//由一个指定设备的句柄创建一个新的Graphics对象
Graphics g1 = Graphics.FromHdc ( dc1 ) ;
//根据屏幕大小创建一个与之相同大小的Bitmap对象
Bitmap MyImage = new Bitmap ( control.ClientSize.Width , control.ClientSize.Height, g1 ) ;
//获得屏幕的句柄
Graphics g2 = Graphics.FromImage ( MyImage ) ;
//获得位图的句柄
IntPtr dc3 = g1.GetHdc ( ) ;
IntPtr dc2 = g2.GetHdc ( ) ;
//把当前屏幕捕获到位图对象中
Point pos = control.PointToScreen(control.Location);
pos.X -= control.Location.X;
pos.Y -= control.Location.Y;
BitBlt ( dc2 , 0 , 0 , control.ClientSize.Width , control.ClientSize.Height , dc3 , pos.X , pos.Y , 13369376 ) ;
//释放屏幕句柄
g1.ReleaseHdc ( dc3 ) ;
//释放位图句柄
g2.ReleaseHdc ( dc2 ) ;
MyImage.Save ( filename , System.Drawing.Imaging.ImageFormat.Jpeg ) ;
}
[ System.Runtime.InteropServices.DllImportAttribute ( "gdi32.dll" ) ]
private static extern IntPtr CreateDC (
string lpszDriver , // 驱动名称
string lpszDevice , // 设备名称
string lpszOutput , // 无用,可以设定位"NULL"
IntPtr lpInitData // 任意的打印机数据
) ;
[ System.Runtime.InteropServices.DllImportAttribute ( "gdi32.dll" ) ]
private static extern bool BitBlt (
IntPtr hdcDest , // 目标设备的句柄
int nXDest , // 目标对象的左上角的X坐标
int nYDest , // 目标对象的左上角的X坐标
int nWidth , // 目标对象的矩形的宽度
int nHeight , // 目标对象的矩形的长度
IntPtr hdcSrc , // 源设备的句柄
int nXSrc , // 源对象的左上角的X坐标
int nYSrc , // 源对象的左上角的X坐标
System.Int32 dwRop // 光栅的操作值
) ;
}
// 测试
private void button1_Click(object sender, System.EventArgs e)
{
ToBmp(button1, "c:\\button1.jpg");
}
waynenee
2005-10-26
打赏
举报
回复
帮你顶上去,我也类似的困扰
zhaoliang_chen
2005-08-18
打赏
举报
回复
p
zengkun100
2005-08-18
打赏
举报
回复
从codeproject上找到一篇解决我这个问题的文章,现在winform上的很多绘图问题看到好多人都是用gdi解决的,而不是用gdi+
arraden
2005-08-18
打赏
举报
回复
办你顶,用Bitblt试试
VC++中
客户
区
保存
为
BMP
图片
本文介绍了如何在VC++中将对话框的
客户
区
转换为
BMP
图片
,主要包括获取
客户
区
、设置位图格式和
内容
以及
保存
为
BMP
文件的步骤。示例代码中还涉及到了‘另存为’文件对话框的使用。
保存
客户
区
数据成
BMP
图片
本文档详细介绍了如何使用Windows API将窗口
客户
区
的数据
保存
为
BMP
图像文件。首先创建BITMAPINFO结构填充信息头,然后获取
客户
区
尺寸,创建兼容DC并进行位块传输。最后,创建DIBSection
保存
到文件,并完成BITMAPFILEHEADER的填充,将数据写入文件。
实现
BMP
图片
的
保存
和自绘图形的
BMP
保存
本文介绍使用VC++进行
BMP
图像处理的方法,包括
保存
客户
区
为
BMP
、自绘图形输出到
BMP
文件、
BMP
信息读取及改写、获取
BMP
像素数据和
BMP
图片
在静态控件中的显示。
客户
端上传到服务端
图片
,服务端把
图片
保存
到指定的文件中
这篇博客展示了如何使用Java实现
客户
端将
图片
上传到服务端,并在服务端将
图片
保存
到指定文件。
客户
端通过Socket发送
图片
数据,服务端接收数据并
保存
为
BMP
格式文件。服务端有两种实现
方式
:一对一上传和多线程上传,以支持并发处理多个
客户
端请求。
读取
bmp
文件,缩放后
保存
本文介绍了一种使用C++实现
BMP
图片
文件的读取、缩放及转换的方法。通过对位图文件结构的理解,实现了将原始
BMP
图片
按
客户
区
大小缩放并
保存
为新文件的功能。
C#
111,129
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章