所以我有2个类别:ImageScanner和Form1
我想做的是继续在我的while循环中调用ScreenCapture方法,直到满足特定条件为止。此方法捕获我的屏幕,并将屏幕截图另存为PNG文件在同一位置。这意味着每次我截图时,新的都会替换旧的。
当我单击表单上的按钮时,我正在尝试执行此操作,因此我不知道为什么C#给我一个错误。但是,当不在循环中时,我可以调用ScreenCapture方法。
class ImageScanner
{
public static void ScreenCapture()
{
var bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height,
PixelFormat.Format32bppPArgb);
// Create a graphics object from the bitmap.
var gfxScreenshot = Graphics.FromImage(bmpScreenshot);
// Take the screenshot from the upper left corner to the right bottom corner.
gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,
Screen.PrimaryScreen.Bounds.Y,
0,
0,
Screen.PrimaryScreen.Bounds.Size,
CopyPixelOperation.SourceCopy);
// Save the screenshot to the specified path that the user has chosen.
bmpScreenshot.Save("Screenshot.png", ImageFormat.Png);
}
}
public partial class ClickForm : Form
{
private void ECFile_Click(object sender, EventArgs e)
{
int j = 0;
while (j < 20)
{
j += 1;
ImageScanner.ScreenCapture();
}
MessageBox.Show("found");
}
}
错误信息:
System.Runtime.InteropServices.ExternalException (0x80004005): A generic error occurred in GDI+.
at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)
at System.Drawing.Image.Save(String filename, ImageFormat format)
at AutoClicker.ImageScanner.ScreenCapture() in C:\Users\User1\source\repos\AutoClicker\AutoClicker\ImageScanner.cs:line 32
at AutoClicker.ClickForm.ECFile_Click(Object sender, EventArgs e) in C:\Users\User1\source\repos\AutoClicker\AutoClicker\Form1.cs:line 232
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
通常由于权限限制而发生这种情况,请对您保存到的文件夹授予足够的权限
如您所见,它卡在了
System.Drawing.Image.Save
优良作法是先让所有人完全控制,然后再通过测试并通过尝试减少许可。
保存文件时,应提供完整路径,包括目录,文件夹,文件和文件扩展名。例:C:\abcd\filename.bmp
不合主题,但值得一提:此外,考虑到您正在处理外部资源,因此会延迟输入和输出,建议也保存命令Thread.Delay(someseconds)
,尤其是在通过以下方式保存和使用保存的文件时:直接输入另一个代码(例如处理临时文件)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句