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);
} ///
////
其他代码
}