クリップボードからビットマップデータを取得しようとしています。私は成功し、ヘッダからの情報を記録することができクリップボードからCF_DIBV5のビットマップを取得
BOOLEAN exists = IsClipboardFormatAvailable(CF_DIBV5) &&
OpenClipboard(session->windowHandle);
if (exists) {
HGLOBAL clipboard = GetClipboardData(CF_DIBV5);
exists = clipboard != NULL;
if (exists) {
LPTSTR lptstr = GlobalLock(clipboard);
exists = lptstr != NULL;
if (exists) {
BITMAPV5HEADER * header = clipboard;
//now need the HBITMAP!
}
}
}
//...
:私は正常にCF_DIBV5
オブジェクトのヘッダー情報を取得することができます。今実際のHBITMAP
を入力してGetDIBits
に渡すことができます。ドキュメントでは、CF_DIBV5
はBITMAPV5HEADER
で、その後にビットマップ色空間情報とビットマップビットが続きます。
私は皮肉なことに、最後の部分はわかりにくいので混乱してしまいます。私はビットマップビットに到達すると仮定、私はヘッダーのサイズとヘッダスペースに "色空間情報"を追加する必要があります。だから、
HBITMAP bitmap = header + sizeof(BITMAPV5HEADER) + /* ???? */;
私は
どのように私は、この神秘的な色空間情報の大きさを知ることができます...と思いますか?そして、上記の表現が真実であるように、文字通り "ビットマップビット"はHBITMAPですか?
私はCの初心者ですので、私は明らかに見落としているかもしれません。
更新:私は今試して、私はDIBを持っているのに対しHBITMAP
は、DDBであるいくつかのドキュメントを再読み込みから実現。だからGetDIBits
は私にとって正しい機能ではありません。任意のDIBを圧縮なしの形式に変換するために、どのような機能を使用できますか?