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

------------------------------------------------------------------------------------------------------------------------

using System.IO;

using System.Windows.Media.Imaging;

 

BitmapSource bitmapSource = null;

 

using(FileStream fileStream = new FileStream("sample.jpg", FileMode.Open))

{

    bitmapSource = GetBitmapSource(fileStream);

}

------------------------------------------------------------------------------------------------------------------------

 

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

------------------------------------------------------------------------------------------------------------------------

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

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요