0

コントロール パネル フォームの画像ボックスにスクリーン ショット イメージを表示しようとしています。しかし、イメージは引き継がれていません。

問題が次のコード行にある可能性があるとの連絡を受けました。

      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 キーワードを使用することは静的フィールドまたは環境では無効であると主張しています。

私の画像を画像ボックスに表示するのを手伝ってくれる人はいますか?

4

1 に答える 1

0

Sincerely I could not understand your code. But I understood the advice was given to you. It says that pass the object of captured screen to the form's constructor:

Lets say you have a form name form1. Here is the constructor and little code you must have in the form1 class:

public partial class Form1 : Form
{
    Image CapturedImage;

    public Form1(Image imgObj) //"you need to pass _screenCap to the constructor of Form1"
    {
        InitializeComponent();
        CapturedImage = imgObj; //"which would need to store it in a field"
    }
}

The constructor is taking the captured image as an object(Image imgObj) and assign it to the field(Image CapturedImage;).

If you want to display it in the picturebox. Simply add this line in the constructor as well:

picturebox.Image = CapturedImage;

Now to call it from another form, do it like this:

Capture screen as you are doing (your first code is correct in which you create object of ScreenCapture class) and save it in an object:

Image CapturedImageObj = capture.CaptureImage(showCursor, curSize, curPosition, startPoint, Point.Empty, bounds, _screenPath, fi);

Now create instance of form1 and pass captured image to the constructor of the form:

form1 ImageForm = new form1(CapturedImageObj);

and display it:

form1.Show();
于 2013-08-22T16:45:06.773 に答える