동적 이미지 디스플레이 제어 ----------의 WinForm 컨트롤 개발 시리즈

에 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

추천

출처www.cnblogs.com/tlmbem/p/11223789.html