微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > WinCE OpenGL绘制立方体和纹理贴图

WinCE OpenGL绘制立方体和纹理贴图

时间:10-08 来源:互联网 点击:

created: 2011-01-05 author: firehood

purpose: 文件加载类,将外部图片资源转化成绘制纹理时所需的位图数据图片格式支持bmp、png、jpg. *********************************************************************/

#include StdAfx.h #include ImgLoader.h // IImage Includer #include #include #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;}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top