View Code
OpenGl显示,任意大小的图片作为背景 bComboBoxSelected==false时是原始背景 void GetBackGroundBmp(CString fileName) { FILE *pFile = fopen(fileName, "r"); if(pFile == 0) exit(0); //读取图像的大小信息 fseek(pFile, 0x0012, SEEK_SET); fread(&ImageW, sizeof(ImageW), 1, pFile); fread(&ImageH, sizeof(ImageH), 1, pFile); PixelLen = ImageW * 3; while(PixelLen %4 != 0) ++PixelLen; PixelLen *= ImageH; // 读取像素数据 PixelData = (GLubyte*)malloc(PixelLen); //if( PixelData == 0 ) // exit(0); fseek(pFile, 54, SEEK_SET); fread(PixelData, PixelLen, 1, pFile); IplImage* pImg1 = cvCreateImage(cvSize(ImageW,ImageH),8,3); pImg1->width = ImageW; pImg1->height = ImageH; memcpy(pImg1->imageData, PixelData, ImageW * ImageH *3); free(PixelData); IplImage* pImg2 = cvCreateImage(cvSize(V_W,V_H), 8,3); cvResize(pImg1, pImg2,CV_INTER_CUBIC); ImageW = V_W; ImageH = V_H; PixelLen = ImageW * 3; while(PixelLen %4 != 0) ++PixelLen; PixelLen *= ImageH; PixelData = (GLubyte*)malloc(PixelLen); memcpy( PixelData, pImg2->imageData,ImageW * ImageH *3); cvReleaseImage(&pImg1); cvReleaseImage(&pImg2); fclose(pFile); } void CbackUp::RenderScene() { //清除缓存 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ///qwy #if 1 if(bComboBoxSelected) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0,0,0,0);// <--- ?定投影模式在 2D 上 glMatrixMode(GL_MODELVIEW); glDisable( GL_DEPTH_TEST ); glLoadIdentity(); // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glRasterPos2f( -ImageW/ImageW, -ImageH/ImageH );// <--- ??參數要注意一下 glDrawPixels(ImageW, ImageH, GL_BGR_EXT, GL_UNSIGNED_BYTE, PixelData); glEnable(GL_DEPTH_TEST); } /// //// 其他代码 }