ペイントイベントで描画することで描画速度/時間を増やすことができ、それを使用してスケーリングなしで描画することもできると読みました。
だから私は自分のパネルでそれを試してみたいと思っています。
問題は、画像が別のスレッドで受信され、次に GUI で受信されることです。それをペイント イベントに渡す方法がわかりません。
私は実際に呼び出して何かをしたくありません(少なくとも私が使用したときは信じられないほど遅いです)。
コードは次のようになります。
protected override void panel1_Paint(object sender, PaintEventArgs e, Image u)
{
e.Graphics.DrawImageUnscaled(u, Point.Empty);
}
フィールドに画像を追加するためにオーバーライドを使用しようとしましたが、静的にしたかったので、スレッドから呼び出すことができました。残念ながらうまくいきませんでした。
しかし、まあ、私は試しました。
private void panel1_Paint(object sender, PaintEventArgs e)
{
// e.Graphics.DrawImageUnscaled(u, Point.Empty);
}
画像を取得できないことを除いて、「機能する」ものがあります。
画像変数を作って、その変数に画像を保存してペイントしてみました。しかし、ペイントはその中の画像を見ることはありません.画像にアクセスすることはできません.別のスレッドから書き込まれた原因を推測します.
//initialize
private Image Im;
////////
my Thread
Im = Image.FromStream(....);
////////////7
void panel1_Paint(object sender, PaintEventArgs e)
{
if(Im !=null)
e.Graphics.DrawImageUnscaled(Im, Point.Empty);
}
これは私が試した方法であり、失敗しました。