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

TestProject.zip
다운로드

▶ MainForm.cs

using System;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.IO;

using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.Card;

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

        #region 생성자 - MainForm()

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

            this.cardView.OptionsBehavior.AutoPopulateColumns = true;

            this.gridControl.DataSource = new nwindDataSetTableAdapters.EmployeesTableAdapter().GetData();

            this.cardView.CustomCardCaptionImage += cardView_CustomCardCaptionImage;
        }

        #endregion

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

        #region 카드 뷰 카드 제목 이미지 설정하기 - cardView_CustomCardCaptionImage(sender, e)

        /// <summary>
        /// 카드 뷰 카드 제목 이미지 설정하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void cardView_CustomCardCaptionImage(object sender, CardCaptionImageEventArgs e)
        {
            DataRow dataRow = this.cardView.GetDataRow(e.RowHandle);

            byte[] bitmapByteArray = (byte[])dataRow["Photo"];

            Bitmap bitmap = GetBitmap(bitmapByteArray);

            Bitmap thumbnailBitmap = GetThumbnailBitmap(bitmap, 32, 32);

            e.Image = thumbnailBitmap;
        }

        #endregion

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

        #region 비트맵 구하기 - GetBitmap(sourceByteArray)

        /// <summary>
        /// 비트맵 구하기
        /// </summary>
        /// <param name="sourceByteArray">소스 바이트 배열</param>
        /// <returns>비트맵</returns>
        private Bitmap GetBitmap(byte[] sourceByteArray)
        {
            MemoryStream memoryStream = new MemoryStream(sourceByteArray);

            Bitmap bitmap = new Bitmap(memoryStream);

            return bitmap;
        }

        #endregion
        #region 썸네일 비트맵 구하기 - GetThumbnailBitmap(sourceBitmap, targetWidth, targetHeight)

        /// <summary>
        /// 썸네일 비트맵 구하기
        /// </summary>
        /// <param name="sourceBitmap">소스 비트맵</param>
        /// <param name="targetWidth">타겟 너비</param>
        /// <param name="targetHeight">타겟 높이</param>
        /// <returns>썸네일 비트맵</returns>
        private Bitmap GetThumbnailBitmap(Bitmap sourceBitmap, int targetWidth, int targetHeight)
        {
            Bitmap bitmap = new Bitmap(targetWidth, targetHeight);

            using(Graphics graphics = Graphics.FromImage(bitmap))
            {
                graphics.InterpolationMode  = InterpolationMode.HighQualityBicubic;
                graphics.CompositingQuality = CompositingQuality.HighQuality;
                graphics.SmoothingMode      = SmoothingMode.HighQuality;
                graphics.TextRenderingHint  = TextRenderingHint.AntiAlias;
                graphics.PixelOffsetMode    = PixelOffsetMode.HighQuality;

                graphics.Clear(Color.Transparent);

                int width;
                int height;

                if(sourceBitmap.Width < targetWidth && sourceBitmap.Height < targetHeight)
                {
                    width  = sourceBitmap.Width;
                    height = sourceBitmap.Height;
                }
                else
                {
                    if(sourceBitmap.Width > sourceBitmap.Height)
                    {
                        width  = targetWidth;
                        height = Convert.ToInt32(targetHeight * Convert.ToDouble(sourceBitmap.Height) / sourceBitmap.Width);
                    }
                    else
                    {
                        width  = Convert.ToInt32(targetWidth * Convert.ToDouble(sourceBitmap.Width) / sourceBitmap.Height); 
                        height = targetHeight;
                    }
                }

                int left = (targetWidth  - width ) / 2;
                int top  = (targetHeight - height) / 2;

                graphics.DrawImage(sourceBitmap, left, top, width, height);
            }

            return bitmap;
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)

'DevExpress > WinForm' 카테고리의 다른 글

[DEVEXPRESS/WINFORM] LayoytView 클래스 : CustomFieldValueStyle 이벤트를 사용해 필드 값 스타일 커스텀 설정하기  (0) 2020.04.26
[DEVEXPRESS/WINFORM] LayoytView 클래스 : CustomFieldCaptionStyle 이벤트를 사용해 필드 제목 스타일 커스텀 설정하기  (0) 2020.04.26
[DEVEXPRESS/WINFORM] LayoytView 클래스 : CustomCardStyle 이벤트를 사용해 카드 스타일 커스텀 설정하기  (0) 2020.04.26
[DEVEXPRESS/WINFORM] GridView 클래스 : CustomDrawEmptyForeground 이벤트를 사용해 데이터가 없을 때 텍스트 표시하기  (0) 2020.04.26
[DEVEXPRESS/WINFORM] GridView 클래스 : CustomDrawRowPreview 이벤트를 사용해 행 미리보기 커스텀 그리기  (0) 2020.04.26
[DEVEXPRESS/WINFORM] GridView 클래스 : CustomDrawGroupPanel 이벤트를 사용해 그룹 패널 커스텀 그리기  (0) 2020.04.25
[DEVEXPRESS/WINFORM] GridView 클래스 : CustomDrawRowIndicator 이벤트를 사용해 행 지시자 커스텀 그리기  (0) 2020.04.25
[DEVEXPRESS/WINFORM] GridView 클래스 : CustomDrawRowFooter/CustomDrawRowFooterCell 이벤트를 사용해 그룹 FOOTER 커스텀 그리기  (0) 2020.04.25
[DEVEXPRESS/WINFORM] CardView 클래스 : CustomDrawCardFieldValue 이벤트를 사용해 카드 필드 값 커스텀 그리기  (0) 2020.04.25
[DEVEXPRESS/WINFORM] GridView 클래스 : CustomDrawGroupRow 이벤트를 사용해 그룹 행 커스텀 그리기  (0) 2020.04.25
Posted by icodebroker

댓글을 달아 주세요