[DEVEXPRESS/WINFORM] CardView 클래스 : CustomCardCaptionImage 이벤트를 사용해 카드 제목 이미지 설정하기
DevExpress/WinForm 2020. 4. 25. 22:51728x90
반응형
728x170
▶ 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
반응형
그리드형(광고전용)
댓글을 달아 주세요