旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【WPF】 PNG ⇔ BitmapSourceの変換

ここ(方法: PNG イメージをエンコードおよびデコードする)で調べました。

PNG ⇒ BitmapSource

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

public BitmapSource ReadPng(string pngPath)
{
    var stream = new FileStream(pngPath, FileMode.Open, FileAccess.Read, FileShare.Read);
    var decoder = new PngBitmapDecoder(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
    return decoder.Frames[0];
    // 誤ってstreamをDisposeするとBitmapSourceも捨てられます
}

BitmapSource ⇒ PNG

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

public void SaveAsPng(string pngPath, BitmapSource bitmapSource)
{
    using (var stream = new FileStream(pngPath, FileMode.Create))
    {
        var encoder = new PngBitmapEncoder();
        encoder.Interlace = PngInterlaceOption.On;
        encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
        encoder.Save(stream);
    }
}