前にここで GDI+ の bitmap オブジェクトの内容を VCL の TBitmap オブジェクトに転写した。今回は、その逆である VCL TBitmap から GDI+ Bitmap への転送を試した。
TGPBitmap クラスのコンストラクタのうち
constructor Create(stream:IStream;..);reintroduce;overload;を使う。まず、VCL TBitmap オブジェクトの内容を SaveToStream() によって、TMemoryStream にセーブする。次に、TStreamAdapter クラスのインスタンスを作成して、TMemoryStream オブジェクトを IStream に変換し、上記のコンストラクタで作成する。TMemoryStream オブジェクトは TGPBitmap オブジェクトをつかっている間は Free してはいけないようだ。
これで、ファイルを介さずに GDI+ Bitmap ←→ VCL TBitmap が完全に双方向になった。このことの意義は、GDI+ の豊富な機能を使ってイメージを加工した後で、また VCL TBitmap にその結果を戻すことができることだ。関数にすると、完全に GDI+ 側を VCL から隠蔽出来る。
コードは