有谁知道如何使用C#进行屏幕截图,并限制其采取的特定的应用容器/部分的图片。 我不想整个屏幕或应用程序的整个窗口。
我的面板被简称:PANEL1用户会点击一个“按钮”,并采取PANEL1的截图和附加到电子邮件。
我想借此只有部分的屏幕截图,然后在本地保存到C:\驱动器和/或连接或嵌入到Outlook电子邮件。
我在互联网上阅读其他各种东西,但他们大多有应对创造走哪我不是在寻找一个Web浏览器控件的屏幕截图复杂的变化。
有谁知道如何使用C#进行屏幕截图,并限制其采取的特定的应用容器/部分的图片。 我不想整个屏幕或应用程序的整个窗口。
我的面板被简称:PANEL1用户会点击一个“按钮”,并采取PANEL1的截图和附加到电子邮件。
我想借此只有部分的屏幕截图,然后在本地保存到C:\驱动器和/或连接或嵌入到Outlook电子邮件。
我在互联网上阅读其他各种东西,但他们大多有应对创造走哪我不是在寻找一个Web浏览器控件的屏幕截图复杂的变化。
我这样做是使用类似
public static void TakeCroppedScreenShot(
string fileName, int x, int y, int width, int height, ImageFormat format)
{
Rectangle r = new Rectangle(x, y, width, height);
Bitmap bmp = new Bitmap(r.Width, r.Height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(r.Left, r.Top, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
bmp.Save(fileName, format);
}
我希望这有帮助
如果你只是想在Panel's
截图,你可以使用内置的DrawToBitmap方法。
Bitmap bmp = new Bitmap(myPanel.Width, myPanel.Height);
myPanel.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
bmp.Save(@"C:\MyPanelImage.bmp");
只是注意,某些控件可能无法使用此功能工作,比如WebBrowser
和RichTextBox
控制,但它应该为大多数其他控制工作(文本框,标签等。)
轻微修改Killercam的回答 :
public static Bitmap takeComponentScreenShot(Control control)
{
// find absolute position of the control in the screen.
Control ctrl = control;
Rectangle rect = new Rectangle(Point.Empty, ctrl.Size);
do
{
rect.Offset(ctrl.Location);
ctrl = ctrl.Parent;
}
while (ctrl != null);
Bitmap bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(rect.Left, rect.Top, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
return bmp;
}
此方法将立即采取截图。 例如,如果你只是调用此函数之前改变面板之内的按钮的知名度,位图将包含按钮。 如果不希望使用keyboardP的答案 。
一个改进Asif's答案:
public static Bitmap takeComponentScreenShot(Control control)
{
// find absolute position of the control in the screen.
Rectangle rect=control.RectangleToScreen(control.Bounds);
Bitmap bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(rect.Left, rect.Top, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
return bmp;
}
我发现这种保存控制位图:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
SaveAsBitmap(panel1,"C:\\path\\to\\your\\outputfile.bmp");
}
public void SaveAsBitmap(Control control, string fileName)
{
//get the instance of the graphics from the control
Graphics g = control.CreateGraphics();
//new bitmap object to save the image
Bitmap bmp = new Bitmap(control.Width, control.Height);
//Drawing control to the bitmap
control.DrawToBitmap(bmp, new Rectangle(0, 0, control.Width, control.Height));
bmp.Save(fileName);
bmp.Dispose();
}
}
我发现一些关于前景这里 ,但我不能测试它,因为我没有在我的电脑上安装了Outlook的。