0

選択したモニターに生成されたテスト画面を表示する必要がある小さなアプリケーションに取り組んでいます。これらの画面をビットマップとして生成しています。生成を簡単かつ迅速にするために、LockBits() メソッドを使用してこれらのビットマップを生成しています。

この 2 番目のモニター用に生成されたビットマップで 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 を実行している場合、この同じコードは正常に動作しますが、四角形が 2 番目のモニターの境界によって定義されている場合は ArgumentException がスローされます。関連する四角形のメンバーは次のとおりです。

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

私の最初の考えは、負の X 値が LockBits で問題を引き起こしている可能性があるということですが、X 値を X の絶対値に置き換えると、同じ例外が発生します。もちろん、これは四角形が無効なパラメーターであると想定していますが、プライマリ モニターから生成された四角形は正常に動作するため、LockBits が気に入らないのは 2 番目のモニターの境界に関する何かであるに違いないと思います。

アドバイスをよろしくお願いします。

4

1 に答える 1