첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
------------------------------------------------------------------------------------------------------------------------------------------------------
728x90
728x170

TestProject.zip
다운로드

▶ MainForm.cs

using System;
using System.Drawing;
using System.Drawing.Text;
using System.Windows.Forms;

namespace TestProject
{
    /// <summary>
    /// 메인 폼
    /// </summary>
    public partial class MainForm : Form
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainForm()

        /// <summary>
        /// 생성자
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            this.pictureBox.Resize += pictureBox_Resize;
            this.pictureBox.Paint  += pictureBox_Paint;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private
        //////////////////////////////////////////////////////////////////////////////// Event

        #region 픽처 박스 페인트시 처리하기 - pictureBox_Paint(sender, e)

        /// <summary>
        /// 픽처 박스 페인트시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void pictureBox_Paint(object sender, PaintEventArgs e)
        {
            using(Font font = new Font("나눔고딕코딩", 40, FontStyle.Bold))
            {
                DrawSplitText
                (
                    e.Graphics,
                    "대각선 반전 텍스트",
                    font,
                    this.pictureBox.ClientRectangle,
                    Brushes.Black,
                    Brushes.White
                );
            }
        }

        #endregion
        #region 픽처 박스 크기 변경시 처리하기 - pictureBox_Resize(sender, e)

        /// <summary>
        /// 픽처 박스 크기 변경시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void pictureBox_Resize(object sender, EventArgs e)
        {
            this.pictureBox.Refresh();
        }

        #endregion

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

        #region 분리 텍스트 그리기 - DrawSplitText(graphics, text, font, rectangle, topForegroundBrush, bottomForegroundBrush)

        /// <summary>
        /// 분리 텍스트 그리기
        /// </summary>
        /// <param name="graphics">그래픽스</param>
        /// <param name="text">텍스트</param>
        /// <param name="font">펀트</param>
        /// <param name="rectangle">사각형</param>
        /// <param name="topForegroundBrush">상단 전경 브러시</param>
        /// <param name="bottomForegroundBrush">하단 전경 브러시</param>
        private void DrawSplitText
        (
            Graphics  graphics,
            string    text,
            Font      font,
            Rectangle rectangle,
            Brush     topForegroundBrush,
            Brush     bottomForegroundBrush
        )
        {
            Bitmap topBitmap    = new Bitmap(rectangle.Width, rectangle.Height);
            Bitmap bottomBitmap = new Bitmap(rectangle.Width, rectangle.Height);

            using(StringFormat stringFormat = new StringFormat())
            {
                stringFormat.Alignment     = StringAlignment.Center;
                stringFormat.LineAlignment = StringAlignment.Center;

                using(Graphics topGraphics = Graphics.FromImage(topBitmap))
                {
                    topGraphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

                    topGraphics.FillRectangle(bottomForegroundBrush, rectangle);

                    topGraphics.DrawString(text, font, topForegroundBrush, rectangle, stringFormat);
                }

                using(Graphics bottomGraphics = Graphics.FromImage(bottomBitmap))
                {
                    bottomGraphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

                    bottomGraphics.FillRectangle(topForegroundBrush, rectangle);

                    bottomGraphics.DrawString(text, font, bottomForegroundBrush, rectangle, stringFormat);
                }
            }

            using(TextureBrush brush = new TextureBrush(topBitmap))
            {
                graphics.FillRectangle(brush, rectangle);
            }

            Point[] pointArray = 
            {
                new Point(rectangle.X    , rectangle.Y     ),
                new Point(rectangle.X    , rectangle.Bottom),
                new Point(rectangle.Right, rectangle.Bottom)
            };

            using(TextureBrush brush = new TextureBrush(bottomBitmap))
            {
                graphics.FillPolygon(brush, pointArray);
            }

            topBitmap.Dispose();

            bottomBitmap.Dispose();
        }

        #endregion
    }
}
728x90
그리드형(광고전용)
Posted by icodebroker
,