之前已经讨论过操作系统无关的图形库部分,这一篇将重点放在windows渲染环境上.
事实上windows api自带一个图形库gdi,gdi对于dib的支持比较好,可以创建一个dib对象,每一帧向dib位图指针提交rgb数据,然后把生成的位图提交到屏幕,于是就能在屏幕中看到渲染的图形了.
创建和释放位图
void initDIB(HDC dibDC,int width,int height) {
BITMAPINFO bmi;
memset(&bmi,0,sizeof(bmi));
bmi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth=width;
bmi.bmiHeader.biHeight=-height;
bmi.bmiHeader.biPlanes=1;
bmi.bmiHeader.biBitCount=32;
bmi.bmiHeader.biCompression=BI_RGB;
screenDIB=CreateDIBSection(NULL,&bmi,DIB_RGB_COLORS,(void**)&screenBits,NULL,0);
dibBefore=(HBITMAP)SelectObject(dibDC,screenDIB);
}
void releaseDIB(HDC dibDC) {
if(screenDIB!=NULL) {
SelectObject(dibDC,dibBefore);
DeleteObject(screenDIB);
screenDIB=NULL;
}
}
首先创建一个32位位图,如果取24位位图那么长宽为任意值时将会出问题;