OpenGL用bmp图片做纹理数据时如何把bmp图片中的信息读到纹理参数GLvoid *pixels中

lemonxinmei330 2006-03-21 09:18:24
请各位高手指点,如何把bmp文件中和纹理数据相关的部分读到定义纹理时所需要的参数中,来做纹理映射.有代码参考吗?谢谢了先.
...全文
236 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
rongrongshen 2006-03-22
  • 打赏
  • 举报
回复
GLuint textures;

BYTE* gltReadBMPBits(const char *szFileName, int *nWidth, int *nHeight)
{
HANDLE hFileHandle;
BITMAPINFO *pBitmapInfo = NULL;
unsigned long lInfoSize = 0;
unsigned long lBitSize = 0;
BYTE *pBits = NULL; // Bitmaps bits
BITMAPFILEHEADER bitmapHeader;
DWORD dwBytes;

// Open the Bitmap file
hFileHandle = CreateFile(szFileName,GENERIC_READ,FILE_SHARE_READ,
NULL,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,NULL);

// Check for open failure (most likely file does not exist).
if(hFileHandle == INVALID_HANDLE_VALUE)
return NULL;

// File is Open. Read in bitmap header information
ReadFile(hFileHandle,&bitmapHeader,sizeof(BITMAPFILEHEADER),
&dwBytes,NULL);

// Check for a couple of simple errors
if(dwBytes != sizeof(BITMAPFILEHEADER))
return FALSE;

// Check format of bitmap file
if(bitmapHeader.bfType != 'MB')
return FALSE;

// Read in bitmap information structure
lInfoSize = bitmapHeader.bfOffBits - sizeof(BITMAPFILEHEADER);
pBitmapInfo = (BITMAPINFO *) malloc(sizeof(BYTE)*lInfoSize);
ReadFile(hFileHandle,pBitmapInfo,lInfoSize,&dwBytes,NULL);

if(dwBytes != lInfoSize)
{
free(pBitmapInfo);
CloseHandle(hFileHandle);
return FALSE;
}

// Save the size and dimensions of the bitmap
*nWidth = pBitmapInfo->bmiHeader.biWidth;
*nHeight = pBitmapInfo->bmiHeader.biHeight;
lBitSize = pBitmapInfo->bmiHeader.biSizeImage;

// If the size isn't specified, calculate it anyway
if(pBitmapInfo->bmiHeader.biBitCount != 24)
{
free(pBitmapInfo);
return FALSE;
}

if(lBitSize == 0)
lBitSize = (*nWidth *
pBitmapInfo->bmiHeader.biBitCount + 7) / 8 *
abs(*nHeight);

// Allocate space for the actual bitmap
free(pBitmapInfo);
pBits =(unsigned char *) malloc(sizeof(BYTE)*lBitSize);

// Read in the bitmap bits, check for corruption
if(!ReadFile(hFileHandle,pBits,lBitSize,&dwBytes,NULL) ||
dwBytes != (sizeof(BYTE)*lBitSize))
pBits = NULL;

// Close the bitmap file now that we have all the data we need
CloseHandle(hFileHandle);

return pBits;
}


//use this to map a bitmap texuture
BYTE *pBytes;
int nWidth, nHeight;

glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE, GL_MODULATE);
// glEnable(GL_TEXTURE_2D);

pBytes = gltReadBMPBits("renlian.bmp", &nWidth, &nHeight);
glBindTexture(GL_TEXTURE_2D, textures);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB8,nWidth, nHeight, 0,
GL_BGR_EXT, GL_UNSIGNED_BYTE, pBytes);
free(pBytes);
*/

19,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧