Rectangle roi = new Rectangle(0, 0, 600, 400); using (Bitmap bmp = new Bitmap(roi.Width, roi.Height)) using (Graphics g = Graphics.FromImage(bmp)) { g.CopyFromScreen(this.PointToScreen(roi.Location), Point.Empty, roi.Size); bmp.Save(SaveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg); }bmp.Save(SaveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg)这句出错,想自己选择目录进行保存,那应该怎么改呢?
SaveFileDialog SaveFileDialog1 = new SaveFileDialog(); SaveFileDialog1.Filter = "图像(*.bmp)|*.bmp";//文件筛选器 SaveFileDialog1.AddExtension = true;//保存文件时自动加扩展名 SaveFileDialog1.RestoreDirectory = true; if (SaveFileDialog1.ShowDialog() != DialogResult.OK) return; //<--- 加这一句,显示选择目录对话框 Rectangle roi = new Rectangle(0, 0, 600, 400); //......
http://www.wangqi.com/html/2007-01/9392.htm
void button1_Click(object sender, EventArg e)
{
Rectangle roi = new Rectangle(0, 0, 300, 200); using( Bitmap bmp = new Bitmap(roi.Width,roi.Height))
using(Graphics g = Graphics.FromImage(bmp))
{
g.CopyFromScreen( this.PointToScreen( roi.Location), Point.Empty, roi.Size );
bmp.Save(@"c:\temp\dump.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
SaveFileDialog1.AddExtension = true;//保存文件时自动加扩展名
SaveFileDialog1.RestoreDirectory = true;
Rectangle roi = new Rectangle(0, 0, 600, 400); using (Bitmap bmp = new Bitmap(roi.Width, roi.Height))
using (Graphics g = Graphics.FromImage(bmp))
{
g.CopyFromScreen(this.PointToScreen(roi.Location), Point.Empty, roi.Size);
bmp.Save(SaveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
}bmp.Save(SaveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg)这句出错,想自己选择目录进行保存,那应该怎么改呢?
SaveFileDialog SaveFileDialog1 = new SaveFileDialog(); SaveFileDialog1.Filter = "图像(*.bmp)|*.bmp";//文件筛选器
SaveFileDialog1.AddExtension = true;//保存文件时自动加扩展名
SaveFileDialog1.RestoreDirectory = true; if (SaveFileDialog1.ShowDialog() != DialogResult.OK) return; //<--- 加这一句,显示选择目录对话框 Rectangle roi = new Rectangle(0, 0, 600, 400);
//......
但是出现了个问题
就是这么加上之后
保存的图像不是只针对form的
图像中还出现了选择目录对话框的身影,
怎么变成针对整个屏幕截图了
{
Rectangle roi = new Rectangle(left,top,Width,Height); using( Bitmap bmp = new Bitmap(roi.Width,roi.Height))
using(Graphics g = Graphics.FromImage(bmp))
{
g.CopyFromScreen( this.PointToScreen( roi.Location), Point.Empty, roi.Size );
bmp.Save(filepath,System.Drawing.Imaging.ImageFormat.Jpeg);
}
}然后你从主程序中选择好了文件路径后直接调用好了.
SaveFileDialog SaveFileDialog2 = new SaveFileDialog();
SaveFileDialog2.Filter = "图像(*.bmp)|*.bmp";//文件筛选器
SaveFileDialog2.AddExtension = true;//保存文件时自动加扩展名
SaveFileDialog2.RestoreDirectory = true;
if (SaveFileDialog2.ShowDialog() != DialogResult.OK)
{
screenPic(0, 0, 850, 600, SaveFileDialog2.FileName);
}但是怎么保存不了
private void button1_Click(object sender, EventArgs e)
{
SaveFileDialog SaveFileDialog1 = new SaveFileDialog();
SaveFileDialog1.Filter = "图像(*.bmp)|*.bmp";//文件筛选器
SaveFileDialog1.AddExtension = true;//保存文件时自动加扩展名
SaveFileDialog1.RestoreDirectory = true; Rectangle roi = new Rectangle(0, 0, 600, 400); using (Bitmap bmp = new Bitmap(roi.Width, roi.Height))
using (Graphics g = Graphics.FromImage(bmp))
{
g.CopyFromScreen(this.PointToScreen(roi.Location), Point.Empty, roi.Size); if( SaveFileDialog1.ShowDialog() == DialogResult.OK)
{
bmp.Save(SaveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
}
public class Api
{
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern bool BitBlt(
IntPtr hdcDest, // 目标 DC的句柄
int nXDest,
int nYDest,
int nWidth,
int nHeight,
IntPtr hdcSrc, // 源DC的句柄
int nXSrc,
int nYSrc,
System.Int32 dwRop // 光栅的处理数值
);public void SavePic()
{
//获得当前窗体的大小
Rectangle rect = this.ClientRectangle;
//创建一个以当前屏幕为模板的图象
Graphics g1 = this.CreateGraphics();
//创建以此为大小的标准位图
Image MyImage = new Bitmap(rect.Width, rect.Height, g1);
Graphics g2 = Graphics.FromImage(MyImage);
//得到屏幕的DC
IntPtr dc1 = g1.GetHdc();
//得到Bitmap的DC
IntPtr dc2 = g2.GetHdc();
//调用此API函数,实现屏幕捕获
BitBlt(dc2, 0, 0, rect.Width, rect.Height, dc1, 0, 0, 13369376);
//释放掉屏幕的DC
g1.ReleaseHdc(dc1);
//释放掉Bitmap的DC
g2.ReleaseHdc(dc2);
//以JPG文件格式来保存
MyImage.Save("C:\\Capture.jpg", ImageFormat.Jpeg); //保存至C盘
MessageBox.Show("当前屏幕已经保存为当前目录的capture.jpg文件!");
g1.DrawImage(MyImage, this.ClientRectangle);//在窗体上画出被捕获的图片
}
2个问题:
1/ private void screenPic( int left ,int top,int Width,int Height,string filepath)
估计你调试时已经加上了.
2/if (SaveFileDialog2.ShowDialog() == DialogResult.OK)
当然要点击确定才能进入到函数中啊,!=的话就不执行当然保存不了了啊.代码测试能行.