|
我最近需要处理一个RGBA数据流,想转存为图片,原始流来自ogre的Texture PF_A8R8G8B8格式。现在想着能还原回OGRE对象,然后再保存成图形。但实际编码后发现,不知道如何以一个内存Buffer创建一个TexturePtr对象?
请教各位大大,如果把一个内存Buffer创建成一个TexturePtr?有好心的大大,最好能给几句代码。谢谢啦
我的代码是这样写的:
- int _tmain(int argc, _TCHAR* argv[])
- {
- byte* buf=new byte[0x8000];
- char fn[]="D:\\test\\image\\bmp_xx11.bmp";
- memset(buf,0,0x8000);
- FILE* f=fopen(fn,"r");
- if (f!=NULL){
- printf("文件[%s]打开成功!\r\n",fn);
- int iCnt=fread(buf,1,0x8000,f);
- if (iCnt!=0){
- printf("读取文件成功[%d]。\r\n",iCnt);
- DWORD bytesize = (64 * 4 * 36);
- Ogre::DataStreamPtr odc(new Ogre::MemoryDataStream( static_cast<void*>(buf), bytesize, false));
- //下面这句创建TexturePtr对象出问题,无法真正创建,getSingleton()返回为NULL
- Ogre::TexturePtr textPtr=Ogre::TextureManager::getSingleton().createManual
- ("__dd_xx_0001", "General", Ogre::TextureType::TEX_TYPE_2D, 64, 36, 1,0, Ogre::PixelFormat::PF_A8R8G8B8 );
- textPtr->load();
- //下面注释掉的这句这方式创建也不行,我晕了,不懂该怎么弄,help~~~~~~~
- //Ogre::TexturePtr tex=Ogre::TexturePtr() ;
-
- textPtr->setTextureType(Ogre::TextureType::TEX_TYPE_2D);
- textPtr->setNumMipmaps(1);
- textPtr->setGamma(1.0f);
- textPtr->enable32Bit(true);
- textPtr->loadRawData(odc, 64, 36, Ogre::PixelFormat::PF_A8R8G8B8);
- DODO::_saveTextureToLocal(textPtr,"D:\\test\\image\\a.png");
- printf("保存成功!\r\n");
- }
- }else{
- printf("文件[%s]打开失败!\r\n",fn);
- }
- system("Pause");
- return 0;
- }
复制代码 |
|