界面大概是这么个样子,最后保存的是方框内的图像
原理是截全屏图像,设置为全屏无边框窗体的背景图,调整方框大小位置后保存区域内图像到文件。
现在遇到点小问题,比如我其他窗体都关掉然后在桌面上截图,最后保存到桌面上(此时程序并没有退出),怎么才能显示出桌面上新添加的那个文件?
这个是我的方法,无效,我整个贴出来好了:
private void pictureBox1_Click(object sender, EventArgs e)
{
#region 方法一
outputBmp = new Bitmap(this.BackgroundImage).Clone(this.mainRect, this.BackgroundImage.PixelFormat);
#endregion 方法一
#region 方法二
/*
outputBmp = new Bitmap(this.mainRect.Size.Width, this.mainRect.Size.Height);
Graphics _g = Graphics.FromImage(outputBmp);
_g.CopyFromScreen(
PointToScreen(this.mainRect.Location),
new Point(0, 0),
this.mainRect.Size);
*/
#endregion 方法二
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Bmp图像文件|*.bmp|Jpeg图像文件|*.jpeg|Gif图像文件|*.gif|Png图像文件|*.png|Icon图像文件|*.ico";
sfd.FileName = getFilename();
if (sfd.ShowDialog() == DialogResult.OK)
{
try
{
string filter = sfd.FileName.Substring(sfd.FileName.LastIndexOf('.') + 1);
switch (filter)
{
case "bmp": outputBmp.Save(sfd.FileName, ImageFormat.Bmp); break;
case "jpeg": outputBmp.Save(sfd.FileName, ImageFormat.Jpeg); break;
case "gif": outputBmp.Save(sfd.FileName, ImageFormat.Gif); break;
case "png": outputBmp.Save(sfd.FileName, ImageFormat.Png); break;
case "ico": outputBmp.Save(sfd.FileName, ImageFormat.Icon); break;
}
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
finally
{
Graphics _g = Graphics.FromImage(ScreenBmp);
_g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size);
this.BackgroundImage = ScreenBmp;
_g.Dispose();
}
}
}
private string getFilename()
{
string t = DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss");
return "我的截图_" + t;
}
表达能力差,希望看懂意思的大哥(shu)大姐(ma)帮忙看下怎么解决、、
------解决思路----------------------
桌面被你的 全屏无边框窗体 挡住了,怎么能看见后增加的文件图标呢?
你应该重新截图吧?就打算你能在窗体上打洞,但也不知道那个图标在哪里呀