Unity 压缩texture
当我们往服务器保存图片时
并不会仅仅保留原图
一般会另外保存一张缩略图
当加载文件夹时只加载缩略图
当在点击缩略图打开图片时
再加载原缩略图
以节省时间和内存
下面以将屏幕截图保存到服务器为例
将屏幕截图和截图缩略图保存到服务器
private IEnumerator UploadPNG(string id)
{
yield return new WaitForEndOfFrame(); int width = Screen.width;
int height = Screen.height; //屏幕截图
Texture2D tex = new Texture2D(width, height, TextureFormat.ARGB32, false);
tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
tex.Apply();
byte[] bytes = tex.EncodeToPNG(); //缩略图(256*256)
Texture2D texThumb = new Texture2D(256, 256); //压缩图片
Color[] destPix = new Color[texThumb.width * texThumb.height];
float warpFactor = 1.0f;
int y = 0;
while (y < texThumb.height)
{
int x = 0;
while (x < texThumb.width)
{
float xFrac = x * 1.0F / (texThumb.width - 1);
float yFrac = y * 1.0F / (texThumb.height - 1);
float warpXFrac = Mathf.Pow(xFrac, warpFactor);
float warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c0 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x - 1) * 1.0F / (texThumb.width - 1);
yFrac = y * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c1 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x + 1) * 1.0F / (texThumb.width - 1);
yFrac = y * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c2 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x + 1) * 1.0F / (texThumb.width - 1);
yFrac = (y - 1) * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c3 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x - 0) * 1.0F / (texThumb.width - 1);
yFrac = (y - 1) * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c4 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x - 1) * 1.0F / (texThumb.width - 1);
yFrac = (y - 1) * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c5 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x + 1) * 1.0F / (texThumb.width - 1);
yFrac = (y + 1) * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c6 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x - 0) * 1.0F / (texThumb.width - 1);
yFrac = (y + 1) * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c7 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x - 1) * 1.0F / (texThumb.width - 1);
yFrac = (y + 1) * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c8 = tex.GetPixelBilinear(warpXFrac, warpYFrac); Color cr = c0 * 0.25f + c1 * 0.125f + c2 * 0.125f + c3 * 0.0625f + c4 * 0.125f + c5 * 0.0625f + c6 * 0.0625f + c7 * 0.125f + c8 * 0.0625f; destPix[y * texThumb.width + x] = cr; x++;
}
y++;
}
texThumb.SetPixels(destPix);
texThumb.Apply();
byte[] bytesThumb = texThumb.EncodeToPNG();
Destroy(tex);
Destroy(texThumb);
//WWWForm上传到服务器
WWWForm form = new WWWForm();
form.AddField("cmd", "savedraw");
form.AddBinaryData("screenshot", bytesThumb);
form.AddBinaryData("draw", bytes); WWW w = new WWW(url, form);
yield return w; if (w.error != null)
{
Debug.Log("Error:" + w.error);
}
else
Debug.Log("OK");
}
声明:此博客为个人学习之用,如与其他作品雷同,纯属巧合,并请明示指出
Unity 压缩texture的更多相关文章
- Unity使用 16bit 压缩 Texture 颜色能均匀过渡
下面是unity自带 16bit 图 的效果,可以看到颜色过度的很不均匀,占用内存 0.5M 如果调成 truecolor 后 颜色过渡很均匀,而内存却占到 1.1 M 讲图片 后缀名改成 ...
- unity读取Texture文件并转为Sprit
using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; usin ...
- unity texture 占用内存大小对比
打包多种类型的项目,空项目和10张放在Resources文件夹中的图为比较案例.以下是比较数据. IPHONE: 1.空项目----空间占用量42.3MB----IPA大小10MB 2.10张1200 ...
- Unity3D–Texture图片空间和内存占用分析(转载)
原地址:http://www.unity蛮牛.com/home.php?mod=space&uid=1801&do=blog&id=756 Texture图片空间和内存占用分析 ...
- 二维纹理 Texture 2D
Textures bring your Meshes, Particles, and interfaces to life! They are image or movie files that yo ...
- unity 接触一个月的感受和心得
unity scrollview 遇到的问题 一个scrollview作为翻页,这样的效果调整. 一页上面有三个scrollview,这三个scrollview上的items不受下层整个页面的scro ...
- Unity 相关经典博客资源总结(持续更新)
就作为一个记录吧,把平时看过的Unity相关的一些好的Blog记录并分享. 好的论坛: Unity官方脚本 点评:这个不用说了,最核心的内容,理解整个Unity引擎的方方面面,梳理结构. Unity ...
- 【转】Unity 相关经典博客资源总结(持续更新)
原文:http://blog.csdn.net/prothi/article/details/20123319 就作为一个记录吧,把平时看过的Unity相关的一些好的Blog记录并分享. 好的论坛: ...
- Unity动态字体在手机上出现字体丢失问题解决
在我们游戏的开发过程中,在部分手机上运行游戏的时候,出现了字体丢失的问题,出问题的手机似乎用的都是高通芯片. 使用的unity是4.2.0版本,ngui是3.4.9版本. 在unity的论坛及unit ...
随机推荐
- zf-关于把某个地址的svn项目移动到另一个上面的步骤
1 首先查检出来 2 然后断开连接 删除元信息(这个必须注意,很敏感的,不然酒吧元信息带入到了另外一个svn地址中了) 3 之后再到另外一个svn上建立远程资源文件,把项目导入进去,注意不要导入错了, ...
- 如何查看和更改mysql数据库文件存放位置
mysql数据库的数据文件默认是存放在:C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data ...
- UML基础概念(转)
UML基础概念 UML概述 uml简介 uml(unified Modeling Language )为面向对象软件设计提供统一的.标准的.可视化的建模语言.适用于描述以用例为驱动,以体系结构为中心的 ...
- HDU - 2680 最短路 spfa 模板
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2680 题目大意,就是一个人可以从多个起点开始出发,看到终点的最短路是多少..只有可以运用和hdu2066 ...
- adb not responding. if you'd like to
在安装genymotion后启动工程报此错误. 解决方案:把其他虚拟机删掉,然后用genymotion新建一个,启动工程OK.
- Size Balanced Tree(SBT) 模板
首先是从二叉搜索树开始,一棵二叉搜索树的定义是: 1.这是一棵二叉树: 2.令x为二叉树中某个结点上表示的值,那么其左子树上所有结点的值都要不大于x,其右子树上所有结点的值都要不小于x. 由二叉搜索树 ...
- Android网络开发之OkHttp--基本用法POST
1.OkHttp框架使用了OkIo框架,不要忘记下OkIo.jar 2.通过POST访问网络,和通过GET访问网络基本相同,多了设置请求参数的过程.主要分为五步: (1).声明并实例化一个OkHttp ...
- AIDL原理解析
首先为什么需要aidl? 下面是不需要aidl 的binder的IPC通讯过程,表面上结构很简单,但是有个困难就是,客户端和服务端进行通讯,你得先将你的通讯请求转换成序列化的数据,然后调用transa ...
- web前端性能优化指南
web前端性能优化指南 web前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loadin ...
- JS基础知识——缓动动画
基于距离的缓动动画 原理:设定起始位置 start 和终止位置 end,变化会越来越慢. 公式:start=start+(end-start)/10; 这个10不是固定的,想分成多少份就分成 ...