IPictureの保存 – プログラミング – Home

通知
すべてクリア

[解決済] IPictureの保存


Woona
 Woona
(@Woona)
ゲスト
結合: 18年前
投稿: 5
Topic starter  

環境は、XP VS6.0(mfc)です。

現在IPictureを使用して画像の読み込み、表示を行っています。
読み込んだ画像を(別データと共に)ファイルに保存したいのですが方法がわかりませ
ん。

イメージ
ar << data1;
ar << 画像;

ご存知の方や、サンプルプログラムなどをご存知の方がいらっしゃいましたら、
よろしくお願いします。


引用未解決
トピックタグ
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

元画像のデータがメモリに読み込まれているなら
そのまま出力すればいいのでは?
画像をIPictureでしか保持してないならIStream経由でも
出力できますがお望みの形式でできるかどうかわかりません。
元画像がJPEGとかでもIPictureにロードされた時点で
BITMAPになってるでしょうし・・・


返信引用
Woona
 Woona
(@Woona)
ゲスト
結合: 18年前
投稿: 5
Topic starter  

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();


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

GlobalAllocで確保したメモリのハンドルをGlobalLockすれば
ポインタにアクセスできます。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

ちなみにm_dwFileSizeってどうやって算出しました?
GlobalAllocの第二引数は0でいいので
実際のバイト数はSaveAsFileの第三引数を使用してください。


返信引用
Woona
 Woona
(@Woona)
ゲスト
結合: 18年前
投稿: 5
Topic starter  

subaruさん ありがとうございます。

GlobalLockを行い、Write時のバイト数をSaveAsFileの第三引数に変更することにより
成功しました。

ちなみにm_dwFileSizeってどうやって算出しました?は、
読み込み時のファイルサイズでした。

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました