c# Winform 개발/UI

picturebox에 휠이벤트로 확대,축소하기( With openCV )

bw50233 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