OpenGl显示,任意大小的图片作为背景

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);
    
 
 } ///
 ////
 其他代码
}
原文地址:https://www.cnblogs.com/mrpomelo/p/2651196.html