Windowsカラーマネジメントプログラミング入門(5)ではプラグインのサンプルは掲載しませんでした。これは、プラグインを一から作るとなるとそのための説明が多くを占め、読むのが大変になってしまうだろうと考えたからです。

しかしながら、既存のプラグインを埋め込みプロファイル対応にする、という話であればそういった説明の多くを省け好都合です。ざっと探してみたところBPG形式のファイル用プラグインがGitHubにありましたので、これを拝借することにしました。

BPGとは

自分も詳細は知らないのですが(おい)、昨年末頃にニュースサイトなどに取り上げられて話題になった新しい画像形式で、"Better Portable Graphics"の略だそうです。特長などは以下を参照してください。

ソースコードとバイナリ

Bitbucketにリポジトリがありますので、そちらを参照してください。バイナリはダウンロードページにある"ifbpgcm_2015xxxx.zip"です。"ifBPG-0.9.x.zip"というファイルがリポジトリ上にありますが、これはオリジナルのプラグインの作者によるものですので埋め込みプロファイル対応ではありません。

埋め込みプロファイル対応の詳細

主な変更箇所は差分を見ていただくと分かりますが、spiBPG_ex.cGetPictureEx()内にあります。これはlibbpgライブラリを使用してBPGファイルをデコードしDIBに変換する関数です。

ヘッダ用にメモリを確保する前に埋め込みプロファイルを確認してサイズを控えておき(99~107行)、確保の際にはそのサイズを追加しています(117行目)。最後に、ヘッダにプロファイルが埋め込まれていることを示す値を設定し、プロファイルの本体データをコピー(148~155行)して完了です。