첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ 이미지 돋보기 사용하기

------------------------------------------------------------------------------------------------------------------------


TestProject.zip


MainForm.cs

 

 

using System;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Windows.Forms;

 

namespace TestProject

{

    /// <summary>

    /// 메인 폼

    /// </summary>

    public partial class MainForm : Form

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region Field

 

        /// <summary>

        /// 스케일

        /// </summary>

        private const int SCALE = 2;

 

        /// <summary>

        /// 맵 비트맵 반지름

        /// </summary>

        private const int MAP_BITMAP_RADIUS = 25;

 

        /// <summary>

        /// 소스 비트맵 포커스 반지름

        /// </summary>

        private const int SOURCE_BITMAP_FOCUS_RADIUS = MAP_BITMAP_RADIUS * SCALE;

 

        /// <summary>

        /// 소스 비트맵 포커스 지름

        /// </summary>

        private const int SOURCE_BITMAP_FOCUS_DIAMETER = 2 * SOURCE_BITMAP_FOCUS_RADIUS;

 

 

        /// <summary>

        /// 소스 비트맵

        /// </summary>

        private Bitmap sourceBitmap;

 

        /// <summary>

        /// 맵 비트맵

        /// </summary>

        private Bitmap mapBitmap;

 

        /// <summary>

        /// 맵 포커스 XOR 비트맵

        /// </summary>

        private Bitmap mapFocusXORBitmap;

 

        /// <summary>

        /// 최종 맵 비트맵

        /// </summary>

        private Bitmap finalMapBitmap;

 

        /// <summary>

        /// 포커스 사각형

        /// </summary>

        private Rectangle focusRectangle = new Rectangle(0, 0, SOURCE_BITMAP_FOCUS_DIAMETER, SOURCE_BITMAP_FOCUS_DIAMETER);

 

        /// <summary>

        /// 소스 포커스 비트맵 사각형

        /// </summary>

        private Rectangle sourceFocusRectangle = new Rectangle(0, 0, SOURCE_BITMAP_FOCUS_DIAMETER, SOURCE_BITMAP_FOCUS_DIAMETER);

 

        /// <summary>

        /// 맵 포커스 비트맵 사각형

        /// </summary>

        private Rectangle mapFocusRectangle = new Rectangle(0, 0, SOURCE_BITMAP_FOCUS_DIAMETER, SOURCE_BITMAP_FOCUS_DIAMETER);

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - MainForm()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainForm()

        {

            InitializeComponent();

 

            this.mapPictureBox.Image    = Image.FromFile("usmapsmall.jpg");

            this.sourcePictureBox.Image = Image.FromFile("usmap.gif"     );

 

            #region 이벤트를 설정한다.

 

 

 

            #endregion

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Private

        //////////////////////////////////////////////////////////////////////////////// Event

 

        #region 폼 로드시 처리하기 - Form_Load(sender, e)

 

        /// <summary>

        /// 폼 로드시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void Form_Load(object sender, EventArgs e)

        {

            this.sourceBitmap      = (Bitmap)this.sourcePictureBox.Image;

            this.mapBitmap         = (Bitmap)this.mapPictureBox.Image;

            this.finalMapBitmap    = (Bitmap)(this.mapBitmap.Clone());

            this.mapFocusXORBitmap = new Bitmap(SOURCE_BITMAP_FOCUS_DIAMETER, SOURCE_BITMAP_FOCUS_DIAMETER);

        }

 

        #endregion

        #region 맵 픽처 박스 마우스 이동시 처리하기 - mapPictureBox_MouseMove(sender, e)

 

        /// <summary>

        /// 맵 픽처 박스 마우스 이동시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void mapPictureBox_MouseMove(object sender, MouseEventArgs e)

        {

            this.mapFocusRectangle.X = e.X - SOURCE_BITMAP_FOCUS_RADIUS;

            this.mapFocusRectangle.Y = e.Y - SOURCE_BITMAP_FOCUS_RADIUS;

 

            this.sourceFocusRectangle.X = e.X * SCALE - SOURCE_BITMAP_FOCUS_RADIUS;

            this.sourceFocusRectangle.Y = e.Y * SCALE - SOURCE_BITMAP_FOCUS_RADIUS;

 

            // 맵 포커스 XOR 비트맵을 설정한다.

            using(Graphics graphics = Graphics.FromImage(this.mapFocusXORBitmap))

            {

                graphics.DrawImage(this.mapBitmap, this.focusRectangle, this.mapFocusRectangle, GraphicsUnit.Pixel);

 

                using(SolidBrush brush = new SolidBrush(Color.FromArgb(255, 1, 2, 3)))

                {

                    graphics.FillEllipse(brush, this.focusRectangle);

 

                    this.mapFocusXORBitmap.MakeTransparent(brush.Color);

                }

            }

 

            // 최종 맵 비트맵을 설정한다.

            using(Graphics graphics = Graphics.FromImage(this.finalMapBitmap))

            {

                graphics.SmoothingMode = SmoothingMode.AntiAlias;

 

                // 최종 맵 비트맵의 전체 영역에 맵 비트맵을 그린다.

                graphics.DrawImage(this.mapBitmap, 0, 0, this.mapBitmap.Width, this.mapBitmap.Height);

 

                // 최종 맵 비트맵의 맵 포커스 사각형 영역에 소스 비트맵의 소스 포커스 사각형 영역의 이미지를 그린다.

                graphics.DrawImage(this.sourceBitmap, this.mapFocusRectangle, this.sourceFocusRectangle, GraphicsUnit.Pixel);

 

                // 최종 맵 비트맵의 맵 포커스 사각형 영역에 맵 포커스 XOR 비트맵을 그린다.

                // 맵 포커스 XOR 비트맵의 중앙 원 영역이 투명 처리되어 있기 때문에 원 영역을 제외한 나머지 부분만 그린다.

                graphics.DrawImage(this.mapFocusXORBitmap, this.mapFocusRectangle, this.focusRectangle, GraphicsUnit.Pixel);

 

                graphics.DrawEllipse(Pens.Blue, this.mapFocusRectangle);

 

                this.mapPictureBox.Image = this.finalMapBitmap;

            }

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요