用MDI的主窗体的菜单中的SAVE菜单项把子窗体上画的图形保存为JPG文件。(子窗体上有按钮以确定所画的图形如:圆、线、矩形等,用鼠标点击按钮后即可在窗体上画图)大部分已经完成了只差这最后一个功能了,只知道要用流和SaveFileDialog,但怎样才能把子窗体上画的图形取出并用流保存为JPG呢?
解决方案 »
- WinForm中怎样做一个类似于QQ设置中的网络设置下的HTTP代理
- 上传漏洞
- 救命:关于SQL查找数据的问题!!!
- 两个很简单的问题,再加50分求解!
- 用webBrower,TabContol做浏览器的问题
- Invoke or BeginInvoke cannot be called on a control until the window handle has been created.
- 我最近想买一本书.net的书,大家给介绍介绍啊``
- 控件中鼠标样式的问题
- 在C#中怎样判断驱动器是软驱还是光驱或硬盘
- c#生成器源碼公開
- (100)winform 如何在浏览器()axWebBrowser中,指定的页面要由axWebBrowser打开?
- 我想用VoiceXML2 技术做一个二次开发得接口,但是不知道用C#如何做解析
System.IO.MemoryStream stream = new System.IO.MemoryStream();
pictureBox1.Image.Save(stream,System.Drawing.Imaging.ImageFormat.Jpeg); //JPEG格式
Bitmap bmp = new Bitmap(stream);
非管理代码:参考msdn之windows gdi-Bitmaps-capturing an image
MethodInfo method = frm.GetType().GetMethod("OnPaint", BindingFlags.NonPublic | BindingFlags.Instance);
MethodInfo method2 = frm.GetType().GetMethod("OnPaintBackground", BindingFlags.NonPublic | BindingFlags.Instance);
Bitmap bit = new Bitmap(frm.ClientSize.Width, frm.ClientSize.Height, frm.CreateGraphics()); method2.Invoke(frm, new object[]{new PaintEventArgs(Graphics.FromImage(bit), new Rectangle(0, 0, bit.Width, bit.Height))});
method.Invoke(frm, new object[]{new PaintEventArgs(Graphics.FromImage(bit), new Rectangle(0, 0, bit.Width, bit.Height))});
bit.Save(@"1.bmp");
}
窗体上的子控件此方法不能画出
{
Bitmap bit = new Bitmap(frm.ClientSize.Width, frm.ClientSize.Height);
//IntPtr hDc = GetWindowDC(frm.Handle);
Graphics hG = frm.CreateGraphics();
IntPtr hDc = hG.GetHdc();
Graphics bitG = Graphics.FromImage(bit);
IntPtr bitDc = bitG.GetHdc();
BitBlt(bitDc, 0, 0, bit.Width, bit.Height, hDc, 0, 0, 0x00CC0020);
hG.ReleaseHdc(hDc);
hG.Dispose();
bitG.ReleaseHdc(bitDc);
bitG.Dispose();
// ReleaseDC(frm.Handle, hDc);
bit.Save("1.bmp");
}
不捕获caption
去掉,改动相应部分,ClientSize变Size,捕获整个窗体
另外,如何用流和SaveFileDialog把获得的图保存为JPG文件
SaveFileDialog获取文件名,bitmap.save保存文件。jpeg不直接支持保存,你需要找第三方工具
pens.white?