当前位置:网站首页>Unity 加载读取PPT
Unity 加载读取PPT
2022-07-30 23:18:00 【柏雁】
效果

问题
本例子结合FancyScrollView,读取PPT效果。PPT读取的时候有点卡顿,建议优化一下,在程序启动前预加载一下PPT,缓存在内存里,体感会更好。
说明
Unity版本:2021.3.6f1c1
Unity API兼容等级:Net Framework4.x

DLL库:
Aspose.Slides:下载 .NET DLL 以读取编辑演示文稿|Aspose.Slides
https://releases.aspose.com/slides/net/
System.Drawing:2021.3.6f1c1\Editor\Data\MonoBleedingEdge\lib\mono\unityjit中找
两个库我已经给大家封装在一个包里了,大家下载即可。
包名:PPT_FancyScrollView.unitypackage
链接:https://pan.baidu.com/s/1KAhXOgSty8yI-G_LkrnXhQ
提取码:n335
// 核心代码
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using UnityEngine;
using System.Threading.Tasks;
using Aspose.Slides;
namespace FancyScrollView.PPT
{
public class PPTDManager : MonoBehaviour
{
private static PPTDManager instance;
public static PPTDManager Instance
{
get
{
if (instance == null)
{
instance = new GameObject().AddComponent<PPTDManager>();
// instance = new PPTDManager();
}
return instance;
}
}
public Presentation LoadPPT(string path)
{
if (File.Exists(path) == false) return null;
return new Presentation(path);
}
private Dictionary<string, Sprite> itemDatasCash = new Dictionary<string, Sprite>();
public void LoadPPTByIndex(ItemData itemData, Action<Sprite> completion)
{
Sprite sprite;
var key = itemData.path + itemData.pageIndex;
if (itemDatasCash.TryGetValue(key, out sprite))
{
completion?.Invoke(sprite);
}
else
{
Presentation presentation = itemData.presentation;
int index = itemData.pageIndex;
var slide = presentation.Slides[index];
var bitmap = slide.GetThumbnail(1, 1);
Bitmap2Byte(bitmap, (bytes) =>
{
// PPT的尺寸
// int width = 960;
// int height = 540;
int width = Convert.ToInt16(presentation.SlideSize.Size.Width);
int height = Convert.ToUInt16(presentation.SlideSize.Size.Height);
Texture2D texture2D = new Texture2D(width, height);
texture2D.LoadImage(bytes);
sprite = Sprite.Create(texture2D, new Rect(0, 0, width, height), Vector2.zero);
if (itemDatasCash.ContainsKey(key) == false)
{
itemDatasCash.Add(key, sprite);
}
completion?.Invoke(sprite);
});
}
}
private async Task Bitmap2Byte(Bitmap bitmap, Action<byte[]> completion)
{
using (MemoryStream stream = new MemoryStream())
{
bitmap.Save(stream, ImageFormat.Png);
byte[] data = new byte[stream.Length];
stream.Seek(0, SeekOrigin.Begin);
await stream.ReadAsync(data, 0, Convert.ToInt32(stream.Length));
completion?.Invoke(data);
}
}
}
}如果本文章对你有所帮助,请让我看到你的赞好吗?
边栏推荐
猜你喜欢

vulnhub靶机AI-Web-1.0渗透笔记

【Untitled】

CPM:A large-scale generative chinese pre-trained lanuage model

Chevrolet Trailblazer, the first choice for safety and warmth for your family travel

VS2017 compile Tars test project

IJCAI2022教程 | 口语语言理解:最新进展和新领域

uniapp折叠框二级循环

【LeetCode】42. 接雨水 - Go 语言题解
![[0x800706D9] solution appears in Microsoft Store](/img/f2/7485cd55fd260220378acd485d8dc9.png)
[0x800706D9] solution appears in Microsoft Store

reindex win10
随机推荐
Reverse linked list - in-place inversion method
#Dasctf July Enabler WP
【LeetCode】64. 最小路径和 - Go 语言题解
[MySQL] DQL related operations
leetcode:127. Word Solitaire
第十九周进度(了解物联网基础知识)
go版本升级
只会纯硬件,让我有点慌
BFS题单总结
Successfully resolved ModuleNotFoundError: No module named 'Image'
Go语学习笔记 - gorm使用 - gorm处理错误 Web框架Gin(十)
“蔚来杯“2022牛客暑期多校训练营4 L.Black Hole 垃圾计算几何
"Code execution cannot continue because MSVCP140.dll was not found, reinstalling the program may resolve the problem, etc." Solutions
通过对抗性知识蒸馏压缩深度图神经网络
mysql锁机制
软考学习计划
mysql跨库关联查询(dblink)
阿里云视频点播+项目实战
Data cleaning - ingest using es
win10重建索引