2007年4月16日月曜日

画面への描画

結局画面への描画はこんな感じになった




class CScreen
{
public:
CScreen(void);
~CScreen(void);

HDC m_DC;
HBITMAP m_Bmp;
PBYTE m_Buf;
int m_dspW;
int m_dspH;
int m_WidthByte;

void Blt(HDC hdc, int w, int h);

};

CScreen::CScreen(void)
{
HDC dc = GetDC(NULL);
m_DC = CreateCompatibleDC(dc);
ReleaseDC(NULL,dc);

m_dspW = 480;
m_dspH = 640;
m_WidthByte = (m_dspW*2+1)&0xfffffffe;
m_Buf = (PBYTE) new WORD[m_WidthByte*m_dspH];

}

CScreen::~CScreen(void)
{
DeleteObject(m_DC);
delete [] m_Buf;
}

void CScreen::Blt(HDC hdc, int w, int h)
{
HGDIOBJ oldObj;
m_Bmp = CreateBitmap(m_dspW, m_dspH, 1, 16, m_Buf);

oldObj = SelectObject(m_DC, m_Bmp);
BitBlt(hdc,0,0,w,h,m_DC,0,0,SRCCOPY);
SelectObject(m_DC, oldObj);
DeleteObject(m_Bmp);
}


m_bufをオフスクリーン用のバッファとして、予め画像データを作成しておく

とりあえず画面にバッファの内容を表示することは出来た。
しかし、バッファの画像処理操作は結構遅い、VCのコンパイルオプションでバッファセキュリティチェックを”いいえ”にするとある程度改善されるようだ

0 件のコメント: