BMP出力

[戻る]
高橋 正臣 2005/04/07(木) 14:22:02
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200503/05030058.txt

ここに便乗質問しようとしましたが、済なので新規にしました。
開発環境は WindowsXP VisualStudio.net2003 DirectX9 MFCは使用しています。

僕は CStatic に対してDirectXを使って描画しています。
その描画内容をBMPにして出力したいです。
Google で調べてみてもデバイスコンテキストからビットマップヘッダに結びつけて〜
という物しか見つかりませんでした。

やはり参考した所のようにボールサンプルのような手段しかないのでしょうか?
ちと僕には内容が理解できないです・・・(DirectXどこで使ってるのさ!みたいな^^;)

PATIO 2005/04/07(木) 15:06:09
GDIとAPIで簡単に出力というのは無理だと思いますけれど。
ビットマップファイルヘッダとビットマップヘッダを自分でこさえて
ファイルに順次出力し、最後に画素部分をどっと書き込むと言うのが
普通のやり方だと思います。
GDI+を使えば出来たような気もしますが、
そっちは御自分で調べてみてください。
DirectXにファイル出力するための関数が用意されていないのであれば、
DirectXを使っているかどうかは関係ないと思います。

高橋 正臣 2005/04/13(水) 21:01:28
嗚呼、別の作業をしていて返信遅れました;
PATIOさんありがとうございます。

確かにピクセル情報が取れればいけますね。DirectXに惑わされていました。

m_static.GetDC()->GetPixel( x, y );

で、いけるかなと思ったんですが、そもそもアルファの情報取れなかった。。

そこで CImage にビットをコピーして Save() すればいけそうかなと。
しかし CStatic と CImage を関連付けられなくてハマってます。

取り留めのない文というか失礼な文ですね・・・
もう少し粘ってみます。

なにかアドバイスありましたら宜しくお願いします(o_ _)o

高橋 正臣 2005/04/14(木) 14:56:44
[[解決]]
時間の関係でキャプチャをしてBMPにすることにしました。

# CStatic m_static  CImage m_image 
{
    HDC    hdcMem;
    SIZE   screen;

    screen.cx = 640;
    screen.cy = 480;
    hdcMem    = CreateCompatibleDC( m_static.GetDC()->m_hDC );
    HBITMAP h = CreateCompatibleBitmap(
                m_static.GetDC()->m_hDC, screen.cx, screen.cy
                );

    if( h )
    {
         SelectObject( hdcMem, h );
         BitBlt( hdcMem, 0, 0, screen.cx, screen.cy,
                  m_static.GetDC()->m_hDC, 0, 0, SRCCOPY );
    }
    m_image.Attach( h );
    m_image.Save( "hoge.bmp" );
}

参考ページ
http://www.microsoft.com/japan/developer/winds/Sdk/Samples/SDKSample04.htm

ありがとうございました

古いスレッドには追加発言できません。