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;
}