コントロール パネル フォームの画像ボックスにスクリーン ショット イメージを表示しようとしています。しかし、イメージは引き継がれていません。
問題が次のコード行にある可能性があるとの連絡を受けました。
ScreenCapture capture = new ScreenCapture();
capture.CaptureImage(showCursor, curSize, curPosition, startPoint, Point.Empty, bounds, _screenPath, fi);
新しいスクリーン キャプチャを作成しているとき、データがマイ ピクチャ ボックスに渡されません。プログラムを実行すると、常に null を返す次の行でエラーが発生します。
Image img = (Image)bitmap;
if (OnUpdateStatus == null) return;
ProgressEventArgs args = new ProgressEventArgs(img);
OnUpdateStatus(this, args);
次に、コントロール パネルの winform で、次のように画像を表示しようとしています。
private ScreenCapture _screenCap;
public ControlPanel()
{
InitializeComponent();
_screenCap = new ScreenCapture();
_screenCap.OnUpdateStatus += _screen_CapOnUpdateStatus;
}
private void _screen_CapOnUpdateStatus(object sender, ProgressEventArgs e)
{
imagePreview.Image = e.CapturedImage;
}
私が受けたアドバイスは次のようなものでした。
CaptureImage メソッド内の OnUpdateStatus の値を見ていますね。そのため、ScreenCapture の代わりにメソッドを呼び出すことが重要です。Form1 内で CaptureImage を呼び出すときに同じインスタンスを使用できるように、_screenCap を Form1 のコンストラクター (フィールドに格納する必要があります) に渡す必要があると思われます。
与えられたアドバイスを実行する方法がわかりません。コードの最初の 2 行では、ScreenCapture クラスの新しいインスタンスの作成を削除して、次のように記述しようとしました。
ScreenCapture.CaptureImage(showCursor, curSize, curPosition, startPoint, Point.Empty, bounds, _screenPath, fi);
ただし、これにより次のエラーが生成されます。
エラー 1 非静的フィールド、メソッド、またはプロパティ 'DotFlickScreenCapture.ScreenCapture.CaptureImage(bool, System.Drawing.Size, System.Drawing.Point, System.Drawing.Point, System.Drawing.Point) にはオブジェクト参照が必要です、System.Drawing.Rectangle、文字列、文字列)'
したがって、このエラーを取り除くために、呼び出されるメソッドを静的クラスに変更しましたが、これにより、取得した画像を保存しようとするコードでさまざまなエラーが多数生成されました。
Image img = (Image)bitmap;
if (OnUpdateStatus == null) return;
ProgressEventArgs args = new ProgressEventArgs(img);
OnUpdateStatus(this, args);
私の OnUpdateStatus にはオブジェクト参照が必要であり、私が持っている THIS キーワードを使用することは静的フィールドまたは環境では無効であると主張しています。
私の画像を画像ボックスに表示するのを手伝ってくれる人はいますか?