位图保存无效参数

Posted

技术标签:

【中文标题】位图保存无效参数【英文标题】:Bitmap save invalid parameters 【发布时间】:2018-06-03 11:03:24 【问题描述】:

我正在尝试创建一个截图工具,只是为了学习更多 C#。

如果我想保存屏幕截图,我会收到错误“无效参数”。我做错了什么?这是我的方法。

private void TakeSnapshot()

    string myDir = "C:\\Screenshots";

    try
    
        Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
        Graphics graphics = Graphics.FromImage(printscreen as Image);
        graphics.CopyFromScreen(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, 0, 0, printscreen.Size);
        printscreen.Dispose();
        printscreen.Save(myDir + "Screenshot.png", ImageFormat.Png);
    
    catch (Exception ex)
    
        MessageBox.Show(ex.Message);
    

【问题讨论】:

异常发生在哪一行,文档中关于需要哪些参数的说明是什么?你也应该在Save之后Dispose 现在会保存截图,但新的问题是,整个截图只是黑色/空白。 看起来您的文件路径中缺少“\”。养成的一个好习惯是使用Path.Combine() 创建文件系统路径,因为它会为您添加这些内容。 好的,我完成了,非常感谢。 :) 【参考方案1】:

有四个问题:

CopyFromScreen 的参数错误。这就是为什么结果都是黑色的。请在帮助中查找正确的参数:

https://msdn.microsoft.com/en-us/library/fw1kt6f9(v=vs.110).aspx

您在保存前处置。反过来做。

图片的路径缺少反斜杠。

图形对象也必须被释放。

【讨论】:

使用双换行符分隔段落。 SO 文本解析器会忽略单个换行符。如果您想将项目显示为列表,请参阅格式化帮助或使用 UI 按钮。 哦,在这种情况下......他应该在位图周围使用using 块。这将表明它只能在该块内使用。

以上是关于位图保存无效参数的主要内容,如果未能解决你的问题,请参考以下文章

将无效参数传递给认为无效参数致命的函数

brcc32 无效位图格式(降低图像质量)

brcc32 无效的位图格式

GetDIBits 返回兼容位图的无效颜色数组

Scaleform BitmapData:无效的位图数据

PictureBox 在选项卡按键时抛出“参数无效”ArgumentException