将Gif图转换成Unity Texture2D
最近项目里要从网上拉取玩家的头像,可玩家的头像可以用gif图但unity不支持gif图,这样就会出现拉取失败会显示问号的图,那是Unity内转换Texture2D图失败是给的默认图。于是在网上查找解决方案,果然在http://wiki.unity3d.com/index.php/AnimatedGifDrawer上找到了;其原理是:将gif图拆分成多个单个图片,用Texture2D存放,然后逐个替换Texture2D达到动态效果。
下面是我根据用上面连接里的代码做的测试:
using UnityEngine;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
/*这里引用的System.Drawing是在C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0目录下,这个是unity安装的目录;*/
public class GifToTexture : MonoBehaviour
{public UITexture GifTexture;private List<Texture2D> _mTexture2Ds = new List<Texture2D>();private float _mTime;private float _mSpeed = 5.0f;// Use this for initializationvoid Start (){Image image = Image.FromFile(@"G:\1405069286948.gif");_mTexture2Ds = GifToTextureByCS(image);}// Update is called once per framevoid Update () {if (null != GifTexture && _mTexture2Ds.Count > 0){_mTime += Time.deltaTime;int index = (int)(_mTime*_mSpeed)%_mTexture2Ds.Count;GifTexture.mainTexture = _mTexture2Ds[index];}}List<Texture2D> GifToTextureByCS(Image image){List<Texture2D> texture2D = null;if (null != image){texture2D = new List<Texture2D>();//Debug.LogError(image.FrameDimensionsList.Length);//image.FrameDimensionsList.Length = 1;//根据指定的唯一标识创建一个提供获取图形框架维度信息的实例;FrameDimension frameDimension = new FrameDimension(image.FrameDimensionsList[0]);//获取指定维度的帧数;int framCount = image.GetFrameCount(frameDimension);for (int i = 0; i < framCount; i++){//选择由维度和索引指定的帧;image.SelectActiveFrame(frameDimension, i);var framBitmap = new Bitmap(image.Width, image.Height);//从指定的Image 创建新的Graphics,并在指定的位置使用原始物理大小绘制指定的 Image;//将当前激活帧的图形绘制到framBitmap上;System.Drawing.Graphics.FromImage(framBitmap).DrawImage(image, Point.Empty);var frameTexture2D = new Texture2D(framBitmap.Width, framBitmap.Height);for (int x = 0; x < framBitmap.Width; x++){for (int y = 0; y < framBitmap.Height; y++){//获取当前帧图片像素的颜色信息;System.Drawing.Color sourceColor = framBitmap.GetPixel(x, y);//设置Texture2D上对应像素的颜色信息;frameTexture2D.SetPixel(x, framBitmap.Height - 1 - y, new Color32(sourceColor.R, sourceColor.G, sourceColor.B, sourceColor.A));}}frameTexture2D.Apply();texture2D.Add(frameTexture2D);}}return texture2D;}
}
gif图我上传上面代码只要调好时间效果就和这个差不多了
好像可以获取到每帧图的时间间隔,这个下次去网上查查,再记录下吧。今天就到这,感谢http://wiki.unity3d.com/index.php/AnimatedGifDrawer作者代码的分享。
将Gif图转换成Unity Texture2D相关推荐
- Intel Realsense D435 opencv 为什么将color图转换成灰度图后,再与depth图水平堆叠,其结果一片黑色?(数据未map到0-255)
相关代码 # -*- coding: utf-8 -*- """ @File : obstacle_detection.py @Time : 2019/12/11 10: ...
- 灰度图转换成彩色图和彩虹图
把灰度图转换成彩色图和彩虹图 1. 灰度图转换成彩色图 void Gray2Color(const cv::Mat const &src, cv::Mat &dst){ dst ...
- html视频怎么转换成图片,如何将小视频转换成GIF动图或将GIF动图转换成视频
现在GIF动图是越来越流行了.在过去,它是我们在Web上唯一能展示动画图片的技术.这种技术非常的有用,因为,相对于Real Video Player, Windows Media等技术,都需要特殊的浏 ...
- matlab将图片转成eps,【MATLAB】论文图片处理(各种数据图转换成eps格式)
最近跟eps图片杠上了..转载一个人人网上matlab到eps图片输出格式较好的方法 随着Latex在论文编辑和排版的日益普及,越来越多的人写文章都用Latex,数据图表作为论文不可缺少的一部分,如何 ...
- er图转换成关系模型的例题_有关数据库系统的练习题 E-R图的关系画图转换,,急需 谢谢了...
展开全部 你看62616964757a686964616fe58685e5aeb931333332643239下下边的例子,你的问题就可以解决了. 设某商业集团数据库中有三个实体集.一是"商 ...
- matlab eps格式,【MATLAB】论文图片处理(各种数据图转换成eps格式)
最近跟eps图片杠上了..转载一个人人网上matlab到eps图片输出格式较好的方法 随着Latex在论文编辑和排版的日益普及,越来越多的人写文章都用Latex,数据图表作为论文不可缺少的一部分,如何 ...
- 【突破二次元壁】手把手教你用AnimeGAN将风景图转换成宫崎骏动漫风
[突破二次元壁!]手把手教你用AnimeGAN将风景图转换成宫崎骏动漫风! 未经作者允许,本文禁止转载 0. 效果图: 1. 下载源码: 2. 下载预训练模型: 3. 准备图片: 4. 开始转换: 5 ...
- 如何将实体关系图转换成关系模式
一个实体转换成一个关系模式. 首先,通过visio绘制一个与学生实体有联系的几个E-R图.如下图所示 其中矩形表示的是实体(班级,学生,课程,学习账号),椭圆表示的是属性,菱形表示的是联系(拥有, ...
- er图转关系模式规则_ER图转换成关系模式集的规则[图]
ER图转换成关系模式集的规则[图] 08-18栏目:技术 TAG:关系模式 关系模式 转自己博客园文章 www.jhua.org copyright www.jhua.org A与B=1:1 在A表里 ...
最新文章
- LeetCode中等题之重排数字的最小值
- metasploit 模块和位置
- 百练OJ:2807:两倍
- UNIX再学习 -- 错误和警告
- IE haslayout的理解与bug修复
- 对某钓鱼网站的一次渗透测试
- CRC冗余校验举例和原理
- Python - Django - 中间件 process_exception
- al合成迪丽热巴_手机合成照很假?迪丽热巴却被P成“真”人鱼!
- 125w短波通信距离_125W军用自主选频短波电台
- 迭代器 iterator
- 关于java中数据类型叙述正确的是( )_关于Java中数据类型叙述正确的是:
- 在asp.net 中实现只允许数字输入的文本框
- 驱动调试助手V2.9
- 日期插件中中文乱码修改
- 宏发41F-1Z-C2接线
- 回忆录——一份曾经面试“网易AI产品经理”的作品
- MEM/MBA 写作-论说文(01)概述
- Word取消自动更改、自动更正
- airsim 安装指导(无人机、无人车视觉导航仿真平台)