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 件のコメント:
コメントを投稿