PictureBoxコントロールは、.NETに付属しているコントロールの画像のGIF形式を表示することはできませんImageAnimatorの画像を処理するためのフレームクラスを。
/// <まとめ> /// 動画表示制御 /// </要約> [(ToolboxItem 真の)] [DefaultProperty(" 画像" )] [説明(「動画表示制御」)] パブリック パーシャル クラスAnimationImageExt:コントロール { /// <まとめ> /// フレーム画像寸法属性 /// </要約> プライベートFrameDimension FrameDimensionと、 プライベートイメージイメージ= NULL ; /// <まとめ> /// 画像を表示する /// </要約> [(閲覧可能真の)] 【のDefaultValue(ヌル)] [説明(「表示する画像」)] パブリック画像イメージ { 取得 { 返す この.imageを。} セット { もし(この .image == nullの &&値== nullの) リターン。 もし(値== NULL)// 清除图片 { 場合(この.isAnimation) { この.StopAnimation(); } この .image = 値; この.Invalidate(); } 他に// ロード画像 { IF(この.isAnimation) { この.StopAnimation(); } この .image = 値; ロック(この.image) { この .isAnimation = ImageAnimator.CanAnimate(この.image)。 もし(この .isAnimation)// GIF图片 { GUID [] GUID = この.image.FrameDimensionsList。 この .frameDimension = 新しい FrameDimension(GUID [ 0 ])。 この .frameCount = この .image.GetFrameCount(この.frameDimension)。 この .currentFrame = 0 ; この .image.SelectActiveFrame(この .frameDimension、この.currentFrame)。 この.Invalidate(); この.StartAnimation(); } 他に// 普通图片 { この .frameCount = 1 ; この .currentFrame = 0 ; この.Invalidate(); } } } } } プライベート BOOLのisAnimation; /// <まとめ> /// 動画像か /// </要約> [(閲覧可能偽へ)] 【のDefaultValue(偽)] [説明(「映画か」)] パブリック BOOLのIsAnimation { 取得 { 返す この.isAnimationを。} } プライベート int型 frameCount = 1。; /// <要約> /// すべての画像フレーム。 /// </要約> [(閲覧可能偽へ)] [のDefaultValue(1 )] [説明(「総フレーム数の画像」)] パブリック int型FrameCountは { 取得 { 返す この.frameCountを。} } プライベート INTに、currentFrame = 0 ; /// <要約> /// フレームインデックスが現在再生中 /// </要約> [(閲覧可能偽へ)] [のDefaultValue(0 )] [説明(「現在再生中のフレーム番号」)] パブリック int型に、currentFrameは、 { 取得 { 返す この.currentFrameを。} } 保護された オーバーライドサイズDefaultSize { 取得する { 返す 新しいサイズ(100、100 ); } } 公共AnimationImageExt() { するSetStyle(ControlStyles.UserPaint、真の); するSetStyle(ControlStyles.AllPaintingInWmPaint、真の); するSetStyle(ControlStyles.OptimizedDoubleBuffer、真の); するSetStyle(ControlStyles.ResizeRedraw、真の); するSetStyle(ControlStyles.SupportsTransparentBackColor、真の); InitializeComponent(); この .BackColor = Color.Transparent。 } 保護された オーバーライド ボイドのOnPaint(PaintEventArgsのe)の { ベース.OnPaint(E); もし(この .image!= nullの) { グラフィックG = e.Graphics。 g.DrawImage(この .image、新しいポイント(0、0 )); } } /// <まとめ> /// 動画のループ再生を開始 /// </要約> プライベート ボイドstartAnimation() { ロック(この.image) { ImageAnimator.Animate(この .image、新しい EventHandlerの(この.FrameChanged)); } } /// <まとめ> /// 動画の停止ループ再生 /// </要約> プライベート ボイドstopAnimation() { ロック(この.image) { ImageAnimator.StopAnimate(この .image、新しい EventHandlerの(この.FrameChanged)); この.resetProperty(); } } /// <まとめ> /// リセット画像情報 /// </要約> プライベート ボイドResetProperty() { この .frameDimension = nullを。 この .isAnimation = 偽; この .frameCount = 0 ; この .currentFrame = - 1 ; } /// <要約> /// 当前帧更改事件 /// </要約> /// <PARAM NAME = "差出人"> </ param>の /// <PARAM NAME = "E"> </ param>の プライベート ボイドは FrameChanged(オブジェクト送信者、EventArgsの電子) { この .currentFrame = この .currentFrame + 1 > = この .frameCount?0:この .currentFrame + 1 。 ロック(この.image) { この .image.SelectActiveFrame(この .frameDimension、この.currentFrame)。 この.Invalidate(); } } }
ダウンロード出典:動画表示制御.zipファイル