에 PictureBox 컨트롤은 .NET와 함께 제공되는 제어 사진 GIF 형식을 표시 할 수 없습니다 ImageAnimator의 이미지를 처리하는 프레임 클래스를.
/// <요약> /// 동화상 표시 제어 /// </ 요약> [(ToolboxItem 는 true )] [DefaultProperty ( " 이미지 " )] [설명 ( " 동적 영상 표시 제어 " )] 공용 부분 클래스 AnimationImageExt : 제어 { /// <요약> /// 프레임 영상 사이즈 특성 /// </ 요약> 개인 ; FrameDimension FrameDimension의 개인 영상 이미지 = 널 ; /// <요약> /// 사진이 표시 될 /// </ 요약> [검색 가능한 ( 사실 )] [된 DefaultValue ( 널 )] [설명 ( " 要显示的图片" )] 공공 이미지 이미지 { 얻을 { 반환 이 이미지입니다을; } 설정 { 경우 ( 이 이미지입니다 == 널 && 값 == 널 ) 창 ; 경우 (값 == 널 ) // 清除图片 { 경우 ( 이 .isAnimation) { 이 .StopAnimation (); } 이 이미지입니다 = 값; 이 .Invalidate (); } 다른 // 加载图片 { 경우 ( 이 .isAnimation) { 이 .StopAnimation (); } 이 이미지입니다 = 값; 잠금 ( 본 이미지입니다)을 { 이 .isAnimation = ImageAnimator.CanAnimate ( 본 이미지입니다)를; 경우 ( 이 .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 () } } } } } 전용 부울 isAnimation; /// <요약> /// 동화상 여부 /// </ 요약> [브라우저 블 ( 거짓 )] [의 DefaultValue ( 거짓 )] [설명 ( " 움직임 화상인지 " )] 공중 BOOL IsAnimation는 { GET { 반환 이 본 .isAnimation} } 개인 INT frameCount = 1이다. ] /// <요약> /// 모든 이미지 프레임. /// </ 요약> [(탐색 가능한 거짓으로 )] [(의 DefaultValue 1이다. )] [설명 ( " 모든 이미지 프레임 " )] 공중 INT의 FrameCount는 { GET { 반환 이 본 .frameCount 단계;} } 개인 INT= currentFrame 0 ; /// <요약> /// 현재 재생 프레임 인덱스 /// </ 요약> [(탐색 가능한 거짓으로 )] [의 DefaultValue ( 0 )] [설명 ( " 현재 프레임 번호를 재생 " )] 공중 INT currentFrame { GET은 { 반환 은이 .currentFrame을;} } 보호 재정의 DefaultSize 사이즈 { GET { 반환 새로운 새로운 크기 ( 100 , 100); } } 공공 AnimationImageExt () { 하는 SetStyle (ControlStyles.UserPaint, 진정한 ); 하는 SetStyle (ControlStyles.AllPaintingInWmPaint, 진정한 ); 하는 SetStyle (ControlStyles.OptimizedDoubleBuffer, 진정한 ); 하는 SetStyle (ControlStyles.ResizeRedraw, 진정한 ); 하는 SetStyle (ControlStyles.SupportsTransparentBackColor, 진정한 ); InitializeComponent를 (); 이 .BackColor = Color.Transparent; } 보호 재정의 무효 의 OnPaint (있는 PaintEventArgs 전자) { 기본 .OnPaint (E), IF ( 이 본 이미지입니다 =! 널 ) { 그래픽 G = e.Graphics; g.drawImage ( 이 본 이미지입니다, 새로운 신규 점 ( 0 , 0 )); } } /// <요약> / // 루프 동화상 시작 /// </ 요약> 개인 공극 startAnimation () { 잠금 ( 이 본 이미지입니다) { ImageAnimator.Animate ( 이 본 이미지입니다, 새로운 새핸들러 (이 본 .FrameChanged)); } } /// <요약> /// 하지 루프 동화상 /// </ 요약> 개인 공극 stopAnimation () { 잠금 ( 이 본 이미지입니다) { ImageAnimator.StopAnimate ( 이 본 이미지입니다, 새로운 새 핸들러 ( 이 본 .FrameChanged)) 이 본 .resetProperty (); } } /// <요약> /// 화상 정보를 재설정 /// </ 요약> 개인 공극resetProperty () { 이 .frameDimension = 널 ; 이 .isAnimation = 거짓 ; 이 .frameCount = 0 ; 이 .currentFrame = - 1 ; } /// <요약> /// 当前帧更改事件 /// </ 요약> /// <PARAM NAME = "발신자"> </ PARAM> /// <PARAM NAME = "E"> </ PARAM > 전용 공간 FrameChanged ( 오브젝트 송신자있는 EventArgs E) { 이 .currentFrame = 이 .currentFrame + 1 > = 본.frameCount? 0 : 이 .currentFrame + 1 ; 잠금 ( 본 이미지입니다)을 { 이 .image.SelectActiveFrame ( 이 .frameDimension, 이 .currentFrame); 이 .Invalidate (); } } }
다운로드 출처 : 동적 영상 표시 제어의 .ZIP