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

■ Graphics 클래스 : PixelOffsetMode 속성 사용하기

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


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 생성자 - MainForm()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainForm()

        {

            InitializeComponent();

 

            #region 이벤트를 설정한다.

 

            Load                                   += Form_Load;

            this.modeComboBox.SelectedIndexChanged += modeComboBox_SelectedIndexChanged;

 

            #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.modeComboBox.SelectedIndex = 0;

        }

 

        #endregion

        #region 픽셀 오프셋 모드 콤보 박스 선택 인덱스 변경시 처리하기 - modeComboBox_SelectedIndexChanged(sender, e)

 

        /// <summary>

        /// 픽셀 오프셋 모드 콤보 박스 선택 인덱스 변경시 처리하기

        /// </summary>

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

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

        private void modeComboBox_SelectedIndexChanged(object sender, EventArgs e)

        {

            PixelOffsetMode mode = PixelOffsetMode.Default;

 

            switch(this.modeComboBox.Text)

            {

                case "Half"        : mode = PixelOffsetMode.Half;        break;

                case "HighQuality" : mode = PixelOffsetMode.HighQuality; break;

                case "HighSpeed"   : mode = PixelOffsetMode.HighSpeed;   break;

                case "None"        : mode = PixelOffsetMode.None;        break;

            }

 

            this.targetPictureBox.Image = GetBitmap(this.sourcePictureBox.Image, 20, mode);

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////// Function

 

        #region 비트맵 구하기 - GetBitmap(sourceImage, scale, mode)

 

        /// <summary>

        /// 비트맵 구하기

        /// </summary>

        /// <param name="sourceImage"소스 이미지></param>

        /// <param name="scale">스케일</param>

        /// <param name="mode">픽셀 오프셋 모드</param>

        /// <returns>비트맵</returns>

        private Bitmap GetBitmap(Image sourceImage, int scale, PixelOffsetMode mode)

        {

            int width  = scale * sourceImage.Width;

            int height = scale * sourceImage.Height;

 

            Bitmap bitmap = new Bitmap(width, height);

 

            using(Graphics graphics = Graphics.FromImage(bitmap))

            {

                graphics.Clear(Color.Yellow);

 

                Rectangle sourceRectangle = new Rectangle(0, 0, sourceImage.Width, sourceImage.Height);

                Rectangle targetRectangle = new Rectangle(0, 0, width, height);

 

                graphics.PixelOffsetMode   = mode;

                graphics.InterpolationMode = InterpolationMode.NearestNeighbor;

 

                graphics.DrawImage(sourceImage, targetRectangle, sourceRectangle, GraphicsUnit.Pixel);

            }

 

            return bitmap;

        }

 

        #endregion

    }

}

 

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

Posted by 사용자 icodebroker

댓글을 달아 주세요