win32 api で ビットマップを複製する方法が分からない
恥さらしな話であるが。
win32apiを使ってビットマップを複製する方法がどうも分からない。
思えばGDIまわりを使ったプログラムなんて作ったことがなかった。
やりたいのは、リソースファイルからビットマップを読み込んで、その色反転したビットマップを別に作成するという作業。
ビットマップの読み込みまではできるが、どうすれば色を反転させて複製できるのか分からない。
BitBlt系のapiを使えばどうにかなりそうだが、このapiの引数はビットマップのハンドルではなく、デバイスコンテキストなのだ。
試行錯誤の結果、
ビットマップをリソースからロード
CreateCompatibleDC(NULL)でデバイスコンテキスト(その1)を作成
SelectObjectでデバイスコンテキスト(その1)で元のビットマップを選択
CreateCompatbleBitmapで元のビットマップと互換性のある新しいビットマップを作成
CreateCompatibleDCでデバイスコンテキスト(その2)作成
SelectObjectでデバイスコンテキスト(その2)で新しいビットマップを選択
BitBltでデバイスコンテキスト(その1)のビットマップを反転させながらデバイスコンテキスト(その2)に転送
デバイスコンテキスト(その2)を削除
デバイスコンテキスト(その1)を削除
以上の手順で欲しい結果を得ることができた。
しかし、これが本当に正しい(定石という意味で)のかどうかよく分からない。
win32apiを使ってビットマップを複製する方法がどうも分からない。
思えばGDIまわりを使ったプログラムなんて作ったことがなかった。
やりたいのは、リソースファイルからビットマップを読み込んで、その色反転したビットマップを別に作成するという作業。
ビットマップの読み込みまではできるが、どうすれば色を反転させて複製できるのか分からない。
BitBlt系のapiを使えばどうにかなりそうだが、このapiの引数はビットマップのハンドルではなく、デバイスコンテキストなのだ。
試行錯誤の結果、
ビットマップをリソースからロード
CreateCompatibleDC(NULL)でデバイスコンテキスト(その1)を作成
SelectObjectでデバイスコンテキスト(その1)で元のビットマップを選択
CreateCompatbleBitmapで元のビットマップと互換性のある新しいビットマップを作成
CreateCompatibleDCでデバイスコンテキスト(その2)作成
SelectObjectでデバイスコンテキスト(その2)で新しいビットマップを選択
BitBltでデバイスコンテキスト(その1)のビットマップを反転させながらデバイスコンテキスト(その2)に転送
デバイスコンテキスト(その2)を削除
デバイスコンテキスト(その1)を削除
以上の手順で欲しい結果を得ることができた。
しかし、これが本当に正しい(定石という意味で)のかどうかよく分からない。
この記事へのコメント