none
picturebox 안에 격자선 긋기

    질문

  • 카메라 관련으로 프로그램 만지는 중인데 C# 윈폼은 전혀 몰라서 고민입니다.

    픽쳐박스 안에 카메라 화면이 표시되는데 거기에 마우스 클릭으로 격자 선 (중심으로 기준으로 십자선 등) 을 나타나게 하고싶거든요.

    펜 관련해서도 그렇고 여러모로 찾아봤는데 creategraphics에서 에러 뜨고 제대로 안되네요.

    어떻게 해야할까요.

    2019년 2월 21일 목요일 오전 6:03

모든 응답

  • 안녕하세요.

    검정색 격자를 그리고,

    중앙에 빨간색 십자선을 표시하고

    마우스 클릭하는 위치에 녹색 격자선을 그리는 예제입니다.

    참고하세요.

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsPictureBox
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
    
                this.Load += Form1_Load;
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                pictureBox1.BackColor = Color.White;
                pictureBox1.Paint += PictureBox1_Paint;
                pictureBox1.MouseDown += PictureBox1_MouseDown;
            }
    
    
    
            private void PictureBox1_Paint(object sender, PaintEventArgs e)
            {
                var g = e.Graphics;
    
                int w = pictureBox1.Width;
                int h = pictureBox1.Height;
                //X축 그리기
                for (int x = w / 10; x < w; x += w / 10)
                    g.DrawLine(Pens.Black, x, 0, x, h);
                //Y축 그리기
                for (int y = h / 10; y < h; y += h / 10)
                    g.DrawLine(Pens.Black, 0, y, w, y);
    
                //중심 십자선
                int cx = w / 2;
                int cy = h / 2;
                g.FillRectangle(Brushes.Red, cx - 5, cy - 2, 10, 4);
                g.FillRectangle(Brushes.Red, cx - 2, cy - 5, 4, 10);
            }
    
            private void PictureBox1_MouseDown(object sender, MouseEventArgs e)
            {
                int w = pictureBox1.Width;
                int h = pictureBox1.Height;
                
                //클릭위치
                int clickX = e.X;
                int clickY = e.Y;
    
                //클릭위치에 격자그리기
                Graphics g = pictureBox1.CreateGraphics();
                //가로선
                g.DrawLine(Pens.Green, clickX, 0, clickX, h);
                //세로선
                g.DrawLine(Pens.Green, 0, clickY, w, clickY);
    
            }
    
        }
    }

    관련 블로그 글도 참고하세요.

    https://blog.naver.com/goldrushing/130144193640

    수고하세요.


    • 편집됨 GoldrushKoreaMVP 2019년 2월 25일 월요일 오전 8:42 링크 추가
    2019년 2월 25일 월요일 오전 6:17