ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • picturebox에 휠이벤트로 확대,축소하기( With openCV )
    c# Winform 개발/UI 2021. 6. 22. 09:13

     

    // 폼디자인 1. 패널은 docking
    
    // 2. 그안에 picturebox는 dock을 none으로 생성 ( 확대,축소시 스크롤바가 자동으로 생성된다 )
    
    
    
    // 전역변수로 zoom 비율 생성
    private double ZOOM_FACTOR = 1.2;
    private double NOW_FACOTR = 1;
    
    
    
    // 리사이즈 
    
    static OpenCvSharp.Size resize = new OpenCvSharp.Size();
    
    
    
    // 휠이벤트를 생성합니다
    
    private void pic_MouseWheel(object sender, MouseEventArgs e)
            {
                if (e.Delta > 0)
                {
                    ZoomIn();
                }
                else
                {
                    ZoomOut();
                }
            }
    
    
    
    // 확대, 축소 함수
    
    private void ZoomIn()
            {
                if (NOW_FACOTR <= 2)
                {
                    pic.SizeMode = PictureBoxSizeMode.Zoom; // 여긴 StretchMode 로 해도 상관 없음, zoom으로 하는 경우 화면 배율을 유지하면서 증가
                    pic.Width = Convert.ToInt32((double)pic.Width * ZOOM_FACTOR);
                    pic.Height = Convert.ToInt32((double)pic.Height * ZOOM_FACTOR);
                    metroPanel4.Width = Convert.ToInt32((double)pic.Width * ZOOM_FACTOR);
                    metroPanel4.Height = Convert.ToInt32((double)pic.Height * ZOOM_FACTOR);
    
                    resize = new OpenCvSharp.Size(pic.Width, pic.Height);
                    NOW_FACOTR = NOW_FACOTR * ZOOM_FACTOR;
                    
    
                    // 화면 갱신필요
                    needConvert = true;
                    DrawObject(true);
                }
            }
    
            private void ZoomOut()
            {
                if (NOW_FACOTR >= 0.5)
                {
                    pic.SizeMode = PictureBoxSizeMode.Zoom; // 여긴 StretchMode 로 해도 상관 없음, zoom으로 하는 경우 화면 배율을 유지하면서 증가
    
                    pic.Width = Convert.ToInt32((double)pic.Width / ZOOM_FACTOR);
                    pic.Height = Convert.ToInt32((double)pic.Height / ZOOM_FACTOR);
                    metroPanel4.Width = Convert.ToInt32((double)pic.Width / ZOOM_FACTOR);
                    metroPanel4.Height = Convert.ToInt32((double)pic.Height / ZOOM_FACTOR);
    
                    resize = new OpenCvSharp.Size(pic.Width, pic.Height);
                    NOW_FACOTR = NOW_FACOTR / ZOOM_FACTOR;
    
    
    
                    // 화면 갱신필요
                    needConvert = true;
                    DrawObject(true);
                }
            }
    300x250

    댓글

Designed by Tistory.