0

コード:

this.TopMost = true;
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
this.splitContainer1.SplitterDistance = (this.ClientSize.Width -
    this.splitContainer1.SplitterWidth) / 2;
pictureBox1.Image = Image.FromFile(@"d:\gifs\RadarGifAnimatoion.gif");//pb1.Image;
pictureBox2.Image = Image.FromFile(@"d:\gifs\SatelliteGifAnimatoion.gif");//pb2.Image;
timer1.Interval = animationSpeed;
timer1.Enabled = true;

そして、私はタイマーティックイベントを持っています:

private void timer1_Tick(object sender, EventArgs e)
{

}

この例では、タイマー間隔は 80ms です。したがって、timer1 tick イベント内で、80ms ごとに両方の pictureBox のスナップショットまたはスクリーンショットを取得し、このショットをハードディスクに保存する必要があります。

したがって、最終的には、たとえば 2 つの pictureBoxes の 5 つの画像をハードディスクに保存します。したがって、ハードディスク上の 5 つの各画像を編集すると、2 つの pictureBoxes 画像が表示されます。

timer1 tickイベントでどうすればいいですか?

ここに画像の説明を入力

timer1 tick イベントの更新コード:

private void timer1_Tick(object sender, EventArgs e)
        {
            using (var still = new Bitmap(this.Width, this.Height))
            {
                this.DrawToBitmap(still, new Rectangle(new Point(0, 0), still.Size));
                still.Save(String.Format(@"d:\GifForAnimation\still_{0}.gif", sequence++), System.Drawing.Imaging.ImageFormat.Gif);
                if (sequence == 5)
                {
                    timer1.Stop();
                }
            }

        }

コンストラクターの timer1 間隔を、作成時のアニメーションと同じ速度に設定しました。アニメーション速度は 80ms なので、timer1 も 80ms に設定されています。

それでも、80msごとにpictureBoxの画像を取得する代わりに、同じ画像を取得または保存しています。同じ画像が5枚。

4

1 に答える 1

0

スクリーンショットを作成するには、次のコードを試すことができます。

int sequence = 0;

private void timer1_Tick(object sender, EventArgs e)
{
    using(var still = new Bitmap(form.Width, form.Height))
    {
        form.DrawToBitmap(still, new Rectangle(new Point(0, 0), still.Size));
        still.Save(String.Format(@"c:\still_{0}.gif", sequence++), ImageFormat.Gif);
    }
}

フォームの代わりに、両方のイメージを含む任意のコンテナーを参照できます。

編集

このスクリーンショットにはスタート メニューは含まれておらず、2 つのイメージ コントロールのコンテナーのみが含まれています。

EDIT2

このようなビットマップに UI をレンダリングすると、GIF がアニメーション化されない可能性があります。これは、ビットマップがアニメーションを認識していないためです。また、特定の期間内に GIF を更新し、正しい順序でスクリーンショットを作成するという競合状態にも陥ります。

ビデオ キャプチャ ソフトウェアを使用してビデオを録画し、必要なフレームを選択します。これは、この問題と潜在的な競合状態を解決しようとするよりもはるかに簡単です

于 2013-01-29T11:37:06.963 に答える