デコーダー/エンコーダーの種類

 使用できるデコーダー/エンコーダーを列挙するメソッドがありますので、全て列挙させてどのような種類があるのか調べてみました。

 BitmapDecoder は GetDecoderInformationEnumerator、BitmapEncoder は GetEncoderInformationEnumerator を使って列挙できますので、以下のようなソースを書いて実行させてみます。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    var decoders = BitmapDecoder.GetDecoderInformationEnumerator(BitmapCodecEnumerationFilter.WindowsProvided);

    Debug.WriteLine("[Decoder]");
    Debug.WriteLine("");

    foreach (var decoder in decoders)
    {
        OutputCodecInfo(decoder);
    }

    var encoders = BitmapEncoder.GetEncoderInformationEnumerator(BitmapCodecEnumerationFilter.WindowsProvided);

    Debug.WriteLine("[Encoder]");
    Debug.WriteLine("");

    foreach (var encoder in encoders)
    {
        OutputCodecInfo(encoder);
    }
}

void OutputCodecInfo(BitmapCodecInformation info)
{
    Debug.WriteLine("Codec Name = {0}", info.FriendlyName);

    var sb = new StringBuilder();
    sb.Append("Extensions = ");
    foreach (var ext in info.FileExtensions)
    {
        sb.AppendFormat("{0} ", ext);
    }
    Debug.WriteLine(sb.ToString());

    sb.Clear();
    sb.Append("Mime = ");
    foreach (var mime in info.MimeTypes)
    {
        sb.AppendFormat("{0} ", mime);
    }
    Debug.WriteLine(sb.ToString());

    Debug.WriteLine("");
}

 出力結果は以下のようになりました。

[Decoder]

Codec Name = BMP Decoder
Extensions = .bmp .dib .rle 
Mime = image/bmp 

Codec Name = GIF Decoder
Extensions = .gif 
Mime = image/gif 

Codec Name = ICO Decoder
Extensions = .ico .icon 
Mime = image/ico image/x-icon 

Codec Name = JPEG Decoder
Extensions = .jpeg .jpe .jpg .jfif .exif 
Mime = image/jpeg image/jpe image/jpg 

Codec Name = PNG Decoder
Extensions = .png 
Mime = image/png 

Codec Name = TIFF Decoder
Extensions = .tiff .tif 
Mime = image/tiff image/tif 

Codec Name = WMPhoto Decoder
Extensions = .wdp .jxr 
Mime = image/vnd.ms-photo 

[Encoder]

Codec Name = BMP Encoder
Extensions = .bmp .dib .rle 
Mime = image/bmp 

Codec Name = GIF Encoder
Extensions = .gif 
Mime = image/gif 

Codec Name = JPEG Encoder
Extensions = .jpeg .jpe .jpg .jfif .exif 
Mime = image/jpeg image/jpe image/jpg 

Codec Name = PNG Encoder
Extensions = .png 
Mime = image/png 

Codec Name = TIFF Encoder
Extensions = .tiff .tif 
Mime = image/tiff image/tif 

Codec Name = WMPhoto Encoder
Extensions = .wdp .jxr 
Mime = image/vnd.ms-photo 

 これらが、Windows と一緒に提供されているデコーダー/エンコーダーになります。

 なお、メソッドの引数で渡しているフィルターを BitmapCodecEnumerationFilter.None にすると、デコーダーとして Photoshop Codec という物が列挙されました。

Codec Name = Photoshop Codec
Extensions = .psd 
Mime = image/photoshop 

 このコーデックはおそらく標準の物ではありません。
 Expression Blend に PSD ファイルのインポート機能がありますので、Blend のインストール時に追加された可能性があります。

 なお、デコーダーとして列挙はできますが、単純に BitmapImage のソースとして指定しても読み込みはできませんでした。