当第二个监视器上的矩形时,LockBits()抛出ArgumentException

时间:2013-11-21 15:13:13

标签: c# winforms bitmap lockbits

我正在开发一个小应用程序,需要在选定的监视器上显示一些生成的测试屏幕。我将这些屏幕生成为位图,为了简化和生成速度,我使用LockBits()方法生成这些位图。

当我尝试在为第二台显示器生成的位图上运行LockBits时,我看到的问题就出现了。

Rectangle Res = MonSelect.Resolution;
 private Bitmap GenerateColorBitmap(Color c)
    {
        Bitmap bmp = new Bitmap(Res.Width, Res.Height);
        System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(Res, System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

如果我在使用从主监视器边界取得的矩形生成的位图上运行LockBits,但是如果矩形由第二个监视器的边界定义,则抛出ArgumentException,这个相同的代码可以正常工作。相关的矩形成员如下:

X = -1440
Y = 0
Width = 1440
Height = 900
Left = -1440
Location {X = -1440 Y = 0}

我的第一个想法是,负X值可能导致LockBits出现问题,但是用X的绝对值替换X值会产生相同的异常。这当然假设矩形是无效参数但是从我的主监视器生成的矩形工作正常,我认为它必须是关于LockBits不喜欢的第二个监视器的边界。

提前感谢任何建议。

1 个答案:

答案 0 :(得分:1)

从MSDN LockBits了解rect参数:

  

类型:System.Drawing.Rectangle
     一个Rectangle结构,指定要锁定的位图部分

因此,您传入Rectangle应位于您的位图矩形中,其Location始终为Point.EmptySize为大小的位图。所以异常被正确抛出。