0

我正在开发一个小型应用程序,该应用程序需要在选定的监视器上显示一些生成的测试屏幕。我将这些屏幕生成为位图,为了方便和生成速度,我使用 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 不喜欢的第二个监视器的边界。

提前感谢您的任何建议。

4

1 回答 1

1

从 MSDN LockBits关于rect参数:

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

所以Rectangle你传入的应该在你的位图矩形中,它总是有LocationasPoint.EmptySizeas 位图的大小。所以异常被正确抛出。

于 2013-11-21T15:25:26.130 回答