0
私は毎秒新しい画像をパネルに追加するタイマーを持っています。最初に、グローバル変数Graphics gを作成し、コンストラクターでタイマーを作成し、そこでタイマーを開始します。私のPanelメソッドでは、私はGraphicsオブジェクト(g = e.Graphics)を作成し、次に私のタイマーメソッドでは、そのgオブジェクトを使って新しいイメージを描画します。問題何を見つけることができない、ここでコアコードです(とき最初の呼び出しでプログラムが停止した - g.DrawImageを()):Graphics DrawImage - ArgumentException: 'パラメータが無効です。'
public partial class MyClass: Form
{
private Timer addImage;
private Image img;
private Graphics g;
private Point pos;
public MyClass()
{
InitializeComponent();
img = Image.FromFile("C:/image.png");
pos = new Point(100, 100);
addImage = new Timer()
{
Enabled = true,
Interval = 3000,
};
addImage.Tick += new EventHandler(AddImage);
addImage.Start();
}
private void MyPanel_Paint(object sender, PaintEventArgs e)
{
g = e.Graphics;
}
private void AddImage(Object myObject, EventArgs myEventArgs)
{
g.DrawImage(img, pos); // ArgumentException: 'Parameter is not valid.'
MyPanel.Invalidate();
}
}
コードが爆発する箇所にブレークポイントを置き、入力があなたが期待しているものであることを確認します。また、try/catchをAddImageのコードの周りに置くと、例外を調べて、実際に何が起こっているかを見ることができます。私はあなたがVisual Studioのバージョンを使用していると仮定しています。 –
ファイルをルートディレクトリに配置しないでください。 – LarsTech
'Graphics'オブジェクトをキャッシュしないでください! 'Graphics.g = Graphics.FromImage(bmp)'を使用して 'Bitmap bmp'に描画するか、' e.Graphics'パラメータを使ってコントロールの 'Paint'イベントに描画します。 - また、あなたの場所とスピーチパスは疑わしい。 – TaW