WinCE OpenGL绘制立方体和纹理贴图
created: 2011-01-05 author: firehood
purpose: 文件加载类,将外部图片资源转化成绘制纹理时所需的位图数据图片格式支持bmp、png、jpg. *********************************************************************/
#include StdAfx.h #include ImgLoader.h // IImage Includer #include // IImage lib #pragma comment(lib, Imaging.lib)
CImgLoader::CImgLoader(void)
{ m_pImage = NULL;m_Width = 0;m_Height = 0;}
CImgLoader::~CImgLoader(void)
{ }
// 加载图片资源BOOL CImgLoader::Load(LPCTSTR lpFileName)
{ IImagingFactory *pImgFactory = NULL;IImage *pImage = NULL;IBitmapImage *pBmpImg = NULL;// CoInitializeEx(NULL, COINIT_MULTITHREADED);if (!SUCCEEDED(CoCreateInstance(CLSID_ImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_IImagingFactory, (void **) pImgFactory)))
return FALSE;if (!SUCCEEDED(pImgFactory->CreateImageFromFile(lpFileName, pImage)))
return FALSE;// 获取图像大小信息ImageInfo ImgInfo;pImage->GetImageInfo(ImgInfo);
m_Width = ImgInfo.Width;m_Height = ImgInfo.Height;
if (FAILED(pImgFactory->CreateBitmapFromImage(pImage,m_Width,m_Height,PixelFormat24bppRGB,InterpolationHintDefault,pBmpImg)))
{ return FALSE;} RECT rect = {0,0,m_Width,m_Height};BitmapData *BmpData = new BitmapData;
if (FAILED(pBmpImg->LockBits(rect,ImageLockModeRead|ImageLockModeWrite,PixelFormat24bppRGB,BmpData)))
{ return FALSE;} int line = BmpData->Stride;LPBYTE lpData, lpLine, lpCurPixel;lpData = lpLine = (LPBYTE)BmpData->Scan0; // 获取BMP位图实际值的地址指针// 若为Bottom-Up(从下到上)的位图,则指向buffer的结尾// 若为Top-Down(从上到下)的位图,则指向buffer的开头// int nBytesPP = nBPP >> 3; // 左移三位即除以8,获取图像每像素字节数m_pImage = new unsigned char[m_Width * m_Height * 3];memset(m_pImage, 0, m_Width * m_Height * 3);if(m_pImage == NULL)
return FALSE;if (line>0)
{ int pos = m_Width * m_Height * 3-1;for(int i = 0; i
{ return FALSE;} delete BmpData;pBmpImg = NULL;pImage->Release();pImgFactory->Release();return TRUE;}
// 获取图片数据unsigned char* CImgLoader::GetBmpImage(void)
{ return m_pImage;}
// 获取图像宽度int CImgLoader::Width()
{ return m_Width;}
// 获取图像高度int CImgLoader::Height()
{ return m_Height;}
// 释放图片资源void CImgLoader::Free()
{ if(m_pImage)
{ delete []m_pImage;m_pImage = NULL;}
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
