環境は、XP VS6.0(mfc)です。
現在IPictureを使用して画像の読み込み、表示を行っています。
読み込んだ画像を(別データと共に)ファイルに保存したいのですが方法がわかりませ
ん。
イメージ
ar << data1;
ar << 画像;
ご存知の方や、サンプルプログラムなどをご存知の方がいらっしゃいましたら、
よろしくお願いします。
元画像のデータがメモリに読み込まれているなら
そのまま出力すればいいのでは?
画像をIPictureでしか保持してないならIStream経由でも
出力できますがお望みの形式でできるかどうかわかりません。
元画像がJPEGとかでもIPictureにロードされた時点で
BITMAPになってるでしょうし・・・
subaruさん ありがとうございます。
SaveAsFileを使うところまではわかったのですが、
Netで検索しても英語、中国語ばかりで、なかなか実現できません。
思いに近いサンプル(下記コード)を見つけたのでそのまま実行してみたのですが、
おちてしまいました。利用ほうほうを間違えてますでしょうか?
if(NULL == m_pPicture) return;
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, m_dwFileSize);
if(NULL == hGlobal) return;
LPSTREAM pstm = NULL;
HRESULT hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm);
if(!(SUCCEEDED(hr) && pstm)) return;
LONG lBytes = 0;
hr = m_pPicture->SaveAsFile(pstm, FALSE, &lBytes);
if(hr != S_OK) return;
TRY {
ar.Write(pstm, (UINT)m_dwFileSize); <--ここで
}
CATCH(CFileException, e) {
TRACE(ar.Write failed!!);
} END_CATCH
pstm->Release();
GlobalAllocで確保したメモリのハンドルをGlobalLockすれば
ポインタにアクセスできます。
ちなみにm_dwFileSizeってどうやって算出しました?
GlobalAllocの第二引数は0でいいので
実際のバイト数はSaveAsFileの第三引数を使用してください。
subaruさん ありがとうございます。
GlobalLockを行い、Write時のバイト数をSaveAsFileの第三引数に変更することにより
成功しました。
ちなみにm_dwFileSizeってどうやって算出しました?は、
読み込み時のファイルサイズでした。
ありがとうございました。