Unity3d实现加载PPT文件并展示
Unity3d实现加载PPT文件并展示前言效果展示项目源码功能实现读取ppt文件获取BitMap获取byte数组创建贴图和精灵搭建简单UI测试功能总结前言这个功能基本会用在甲方需要展示已制作完成的PPT的情况下,经过一轮的研究决定选用Aspose.Slides来实现,主要是将所有的页面读取出来,分页展示,展示页码同时实现分页切换的功能。效果展示效果是这样的:项目源码这个因为违规就不分享了。大家自行
前言
这个功能基本会用在甲方需要展示已制作完成的PPT的情况下,经过一轮的研究决定选用Aspose.Slides来实现,主要是将所有的页面读取出来,分页展示,展示页码同时实现分页切换的功能。
效果展示
效果是这样的:
问题修复
当前的版本会存在打包发布会报错的情况,相关问题修正:
1.Unity3d打包程序报错NotSupportedException: Encoding 437 data could not be found.
2.System.TypeInitializationException: The type initializer for ‘ManagedToNativeWrapper’ threw an excep
我这边是在Unity(如2019)的安装目录
Editor\Data\MonoBleedingEdge\lib\mono\unityjit下找到System.Drawing.dll文件,用其替换掉工程内的System.Drawing.dll文件。
项目源码
https://download.csdn.net/download/qq_33789001/16037517
功能实现
主要通过“Aspose.Slides.dll” 和“System.Drawing.dll”两个动态链接库的功能实现。
读取ppt文件
首先新建Presentation,在指定路径下读取文件。
private void Start()
{
string PPTPath = Application.dataPath + "/PPT/ceshi.ppt";
LoadPPTFile(PPTPath);
}
public void LoadPPTFile(string path)
{
presentation = new Presentation(path);
SwitchPage(0);
}
获取BitMap
通过GetThumbnail函数获取当前页面的bitmap。
var Content = presentation.Slides[page];
var BM = Content.GetThumbnail(1f, 1f);
//获取高宽
int width = BM.Width;
int height = BM.Height;
获取byte数组
通过bitmap获取字节数组
private byte[] GetBitMapBytes(Bitmap bm)
{
try
{
using (MemoryStream ms = new MemoryStream())
{
bm.Save(ms, ImageFormat.Png);
byte[] datas = new byte[ms.Length];
ms.Seek(0, SeekOrigin.Begin);
ms.Read(datas, 0, Convert.ToInt32(ms.Length));
return datas;
}
}
catch (Exception e)
{
Debug.LogWarning("Get Bytes faile:" + e.ToString());
return null;
}
}
创建贴图和精灵
通过字节数组的数据创建贴图(Texture2D),并通过贴图创建精灵图片,最后将精灵赋值给展示的图片即完成。
byte[] bytes = GetBitMapBytes(BM);
Texture2D tex = new Texture2D(width, height);
tex.LoadImage(bytes); //创建贴图
Sprite sp = Sprite.Create(tex, new Rect(0, 0, width, height), Vector2.zero);//创建精灵
ShowImg.sprite = sp;
搭建简单UI
功能较简单:
测试功能
新建个ppt文件:
总结
目前实现的就是每页PPT的最终展示效果,没有展示的动画过程。而且展示的路径也是固定的,有空可以加以完善。最好能实现选择文件展示。
后续已经实现手动选择ppt文件
https://blog.csdn.net/qq_33789001/article/details/115118776
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)