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

728x90
반응형
using System.IO;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;

#region JPEG 이미지 구하기 - GetJPEGImage(uiElement, scale, qualityLevel)

/// <summary>
/// JPEG 이미지 구하기
/// </summary>
/// <param name="uiElement">UIElement</param>
/// <param name="scale">확대/축소 비율</param>
/// <param name="qualityLevel">품질 레벨</param>
/// <returns>이미지 바이트 배열</returns>
public byte[] GetJPEGImage(UIElement uiElement, double scale, int qualityLevel)
{
    double actualWidth  = uiElement.RenderSize.Width;
    double actualHeight = uiElement.RenderSize.Height;
    double renderWidth  = actualWidth  * scale;
    double renderHeight = actualHeight * scale;

    RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap((int)renderWidth, (int)renderHeight, 96, 96, PixelFormats.Pbgra32);
    VisualBrush        visualBrush        = new VisualBrush(uiElement);
    DrawingVisual      drawingVisual      = new DrawingVisual();
            
    using(DrawingContext drawingContext = drawingVisual.RenderOpen())
    {
        drawingContext.PushTransform(new ScaleTransform(scale, scale));

        drawingContext.DrawRectangle(visualBrush, null, new Rect(new Point(0, 0), new Point(actualWidth, actualHeight)));
    }

    renderTargetBitmap.Render(drawingVisual);

    JpegBitmapEncoder jpegBitmapEncoder = new JpegBitmapEncoder();

    jpegBitmapEncoder.QualityLevel = qualityLevel;

    jpegBitmapEncoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap));

    byte[] imageByteArray;

    using(MemoryStream memoryStream = new MemoryStream())
    {
        jpegBitmapEncoder.Save(memoryStream);

        imageByteArray = memoryStream.ToArray();
    }

    return imageByteArray;
}
728x90
반응형
Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요