MFC位绘图--如何将图数组显示

来源:互联网 发布:php引号 编辑:程序博客网 时间:2024/05/17 09:18
#define SPACEM 100class CSpace{public:int left;  //空间左上方绝对坐标xint top;  //空间左上方绝对坐标yint width;  //空间宽度int height;  //空间高度unsigned char space[SPACEM][SPACEM];  //生成2维度空间,0表示真空,1表示墙壁,2表示主角,3表示食物public:CSpace(int ileft,int itop);~CSpace();void SetSpace(unsigned char in[SPACEM][SPACEM]);void DrawSpace(CDC *pDC);  private:protected:};CSpace::CSpace(int ileft,int itop){left=ileft;top=itop;width=SPACEM;height=SPACEM;int i,j;for(i=0;i<SPACEM;i++){for(j=0;j<SPACEM;j++)space[i][j]=0;}}CSpace::~CSpace(){}void CSpace::SetSpace(unsigned char in[SPACEM][SPACEM]){int i,j;for(i=0;i<SPACEM;i++)for(j=0;j<SPACEM;j++)space[i][j]=in[i][j];}void CSpace::DrawSpace(CDC *pDC){int i,j;CDC memDC;memDC.CreateCompatibleDC(pDC);CBitmap bmp;bmp.CreateCompatibleBitmap(pDC,500,500);memDC.SelectObject(&bmp);BITMAPINFO bmpInfo;bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);bmpInfo.bmiHeader.biWidth = 487;bmpInfo.bmiHeader.biHeight = -500;bmpInfo.bmiHeader.biPlanes = 1;bmpInfo.bmiHeader.biBitCount = 24;bmpInfo.bmiHeader.biCompression = BI_RGB;bmpInfo.bmiHeader.biSizeImage = 0;bmpInfo.bmiHeader.biXPelsPerMeter = 3000;bmpInfo.bmiHeader.biYPelsPerMeter = 3000;bmpInfo.bmiHeader.biClrUsed = 0;bmpInfo.bmiHeader.biClrImportant = 0;//每行字节数,4字节对齐long nLnBytes = (487*3+3)/4*4;BYTE *pData = new BYTE[nLnBytes*500];memset(pData,0,nLnBytes*500);for(i=0;i<SPACEM;i++){for(j=0;j<SPACEM;j++){if(space[i][j]==0)  //真空为白色{pData[i*nLnBytes+j*3+0]=255;pData[i*nLnBytes+j*3+1]=255;pData[i*nLnBytes+j*3+2]=255;}else if(space[i][j]==1)  //墙壁为黑色{pData[i*nLnBytes+j*3+0]=0;pData[i*nLnBytes+j*3+1]=0;pData[i*nLnBytes+j*3+2]=0;}else if(space[i][j]==2)  //主角为红色{pData[i*nLnBytes+j*3+0]=0;pData[i*nLnBytes+j*3+1]=0;pData[i*nLnBytes+j*3+2]=255;}else if(space[i][j]==3)  //食物为绿色{pData[i*nLnBytes+j*3+0]=0;pData[i*nLnBytes+j*3+1]=255;pData[i*nLnBytes+j*3+2]=0;}else{pData[i*nLnBytes+j*3+0]=0;pData[i*nLnBytes+j*3+1]=0;pData[i*nLnBytes+j*3+2]=0;}}}SetDIBits(pDC->m_hDC,bmp,0,500,pData,&bmpInfo,DIB_RGB_COLORS);delete []pData;pDC->StretchBlt(0,0,400,400,&memDC,0,0,SPACEM,SPACEM,SRCCOPY);}
使用方法

该类中,成员space中存放了自定义调色板,整张位图空间大小为SPACEM*SPACEM

SetSpace可以把自定义的位图数组传入类实例中

DrawSpace可以将自定义位图数组显示

引入的pDC可以是静态控件,下面做了拉伸变换,可以通过改StretchBlt大小来控制拉伸大小


0 0
原创粉丝点击