Iconをbyte配列に変換する C#

Iconをデータベースに保存する需要があり、Image型(byte配列)に変換することになりました。

 

Icon→byte[]

以下に、ファイルに関連付けられたIconをbyte配列に変換するコードを示します。

using (Icon icon = Icon.ExtractAssociatedIcon(filePath))
{
    using (var ms = new MemoryStream())
    {
        Bitmap bmp = icon.ToBitmap();
        bmp.Save(ms, ImageFormat.Png);
        byte[] binary = ms.GetBuffer();
    }
}

ちなみに、ImageFormatは素直にBmpにすると透過情報が保持されません。

あと、Bitmapを経由せずにIconクラスのSave()メソッド呼び出して、icon.Save(ms);みたいにすると色情報がごっそり削られますのでご注意を…
 

byte[]→BitmapSource

おまけで、byte配列の画像をWPFのImageコントロールに表示するコードです。

byte[] binary;
using (var ms = new MemoryStream(binary))
{
    var bitmapDecoder = BitmapDecoder.Create(
        ms, 
        BitmapCreateOptions.PreservePixelFormat, 
        BitmapCacheOption.OnLoad);

    var writable = new WriteableBitmap(bitmapDecoder.Frames.Single());
    writable.Freeze();

    this.Image.Source = writable as BitmapSource;
}

 

Recently

4423lab Written by:

Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です