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

728x90
반응형
728x170

▶ 메모리 손실이 없는 비트맵 소스 구하기 예제

using System.IO;
using System.Windows.Media.Imaging;

BitmapSource bitmapSource = null;

using(FileStream fileStream = new FileStream("sample.jpg", FileMode.Open))
{
    bitmapSource = GetBitmapSource(fileStream);
}

 

728x90

 

▶ 메모리 손실이 없는 비트맵 소스 구하기

using System.IO;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;

#region 비트맵 소스 구하기 - GetBitmapSource(stream)

/// <summary>
/// 비트맵 소스 구하기
/// </summary>
/// <param name="stream">스트림</param>
/// <returns>비트맵 소스</returns>
public BitmapSource GetBitmapSource(Stream stream)
{
    BitmapImage bitmapImage = new BitmapImage();

    bitmapImage.BeginInit();

    bitmapImage.CacheOption  = BitmapCacheOption.OnLoad;
    bitmapImage.StreamSource = stream;

    bitmapImage.EndInit();

    bitmapImage.Freeze();

    BitmapSource bitmapSource = new FormatConvertedBitmap(bitmapImage, PixelFormats.Pbgra32, null, 0);

    WriteableBitmap writeableBitmap = new WriteableBitmap(bitmapSource);

    int width  = writeableBitmap.PixelWidth;
    int height = writeableBitmap.PixelHeight;

    int[] pixelArray = new int[width * height];

    int stride = writeableBitmap.PixelWidth * (writeableBitmap.Format.BitsPerPixel / 8);

    writeableBitmap.CopyPixels(pixelArray, stride, 0);

    writeableBitmap.WritePixels(new Int32Rect(0, 0, width, height), pixelArray, stride, 0);

    bitmapImage = null;

    return writeableBitmap;
}

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

댓글을 달아 주세요