デコードの概要
このトピックでは、ストリームからイメージ ファイルをデコードするために使用される主要な Windows イメージング コンポーネント (WIC) コーデック コンポーネントであるビットマップ デコーダーについて説明します。
このトピックは、次のセクションで構成されています。
はじめに
ビットマップ デコーダーは、デジタル イメージの外部コンテナーとして表示でき、グローバル プロパティとイメージ フレームへのアクセスを提供します。 一部の画像形式では、グローバル サムネイル、プレビュー、カラー コンテキスト、またはメタデータがサポートされますが、他の形式ではフレーム レベルでのみこれらのプロパティが提供されます。 ただし、標準イメージ形式の多くは、これらのグローバル プロパティをサポートしていません。 そのため、WIC によって提供されるネイティブ コーデック実装の多くは、これらのグローバル プロパティの大部分をサポートしていません。 グローバル プロパティのサポートについては、このトピックの「ネイティブ ビットマップ デコーダー」セクションの表を参照してください。
WIC では、ビットマップ デコーダーは IWICBitmapDecoder インターフェイスによって表され、ビットマップのこれらのグローバル プロパティへのアクセスを提供します。さらに重要なのは、ビットマップに含まれるフレームです。 IWICBitmapFrameDecode インターフェイスは個々のビットマップ フレームを表し、「ビットマップ ソースの概要」で詳しく説明されています。
ネイティブ ビットマップ デコーダー
WIC では、標準の Web イメージ形式とハイ ダイナミック レンジ HD Photo 形式用の IWICBitmapDecoder インターフェイスのいくつかのネイティブ実装が提供されます。 次の表に、使用可能なネイティブ デコーダー、クラス識別子名、およびグローバル プロパティのサポートを示します。 機能ではグローバル レベルのサムネイルなどのプロパティがサポートされていない場合がありますが、イメージ形式では、個々のフレーム レベルでこのようなプロパティがサポートされる場合があります。
イメージ形式 | CLSID 名 | サムネイル | プレビュー | 色のコンテキスト | Metadata |
---|---|---|---|---|---|
BMP | CLSID_WICBmpDecoder | いいえ | いいえ | いいえ | いいえ |
GIF | CLSID_WICGifDecoder | いいえ | いいえ | いいえ | はい |
ICO | CLSID_WICIcoDecoder | いいえ | いいえ | いいえ | いいえ |
JPEG | CLSID_WICJpegDecoder | いいえ | いいえ | いいえ | いいえ |
PNG | CLSID_WICPngDecoder | いいえ | いいえ | いいえ | いいえ |
TIFF | CLSID_WICTiffDecoder | いいえ | いいえ | いいえ | いいえ |
HD 写真 | CLSID_WICWmpDecoder | いいえ | はい | いいえ | いいえ |
ビットマップ デコーダーの作成
WIC を使用してイメージをデコードするには、まず、ターゲットイメージ形式の IWICBitmapDecoder のインスタンスを作成する必要があります。 デコーダー インスタンスを使用すると、サポートされている場合はグローバル プロパティとメタデータ、およびイメージ フレームにアクセスできます。 WIC イメージング ファクトリ の IWICImagingFactory には、ビットマップ デコーダーを作成するためのメソッドがいくつか用意されています。 ビットマップ デコーダーを作成するには、次のファクトリ メソッドが用意されています。
次のコードは、イメージ ファイル名を使用してビットマップ デコーダーを作成し、イメージの最初のフレームを取得する方法を示しています。
// Create a decoder
IWICBitmapDecoder *pDecoder = NULL;
hr = m_pIWICFactory->CreateDecoderFromFilename(
szFileName, // Image to be decoded
NULL, // Do not prefer a particular vendor
GENERIC_READ, // Desired read access to the file
WICDecodeMetadataCacheOnDemand, // Cache metadata when needed
&pDecoder // Pointer to the decoder
);
// Retrieve the first frame of the image from the decoder
IWICBitmapFrameDecode *pFrame = NULL;
if (SUCCEEDED(hr))
{
hr = pDecoder->GetFrame(0, &pFrame);
}
デコーダーの機能拡張
WIC のコア機能の 1 つは、コーデック開発者が独自のイメージ コーデックを開発し、イメージ コーデックのネイティブ実装と同じプラットフォーム サポートを得ることを可能にする拡張性フレームワークです。 イメージ形式に関係なく、すべての画像処理に 1 つの一貫性のあるインターフェイス セットが使用されます。 WIC を使用するアプリケーションでは、コーデックがインストールされるとすぐに、新しいイメージ形式が自動的にサポートされます。 コーデック開発の詳細については、「 コンポーネント開発」のトピックを参照してください。 デコーダーの開発の詳細については、「 WIC-Enabled デコーダーの実装」を参照してください。
関連トピック