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 ...
随机推荐
- angular 实现modal windows效果(即模态窗口,半透明的遮罩层),以及bootstrap(css,components,js)的初步学习
废话不说,直接上代码.可直接看效果,对着分析..今天算是bootstrap 入门了,开心.. 突然居然很多事情就是那样,不要太多的畏惧,迈出第一步其实就成功了一半了. <html ng-app= ...
- angularJs中ngModel的坑
angular中指令被用的最多的除了ng-repeat之外就非他莫属了吧,由于各种业务的需求,我们经常需要去写一些继承ngModel的指令,来满足各种奇葩需求,最多的莫过于表单的验证啦,另外你在封装一 ...
- 深入浅出Ajax(四)
function initPage() { btn.onmouseover = buttonOver; btn.onmouseover = buttonOut; } 如上,浏览器只会运行指定的最后一个 ...
- 简单三段式状态机实验1-SOS
一直想从一段式状态机切换到三段式状态机,从书上和网上不断搜寻三段式案例及方法,感觉很简单,就想拿之前做过的实验把一段式改成三段式,可是写起来并非那么简单,很棘手,改完后也没有成功,尤其状态机里面的计数 ...
- python赋值和拷贝----一切皆对象,参数皆引用
摘要: 1 python中的一切事物皆为对象,并且规定参数的传递都是对象的引用. 2 python参数传递都是"传对象引用"方式.实际上相当于c++中传值和传引用的结合. 3 如 ...
- ural1019 Line Painting
Line Painting Time limit: 2.0 secondMemory limit: 64 MB The segment of numerical axis from 0 to 109 ...
- Coloring Trees
Coloring Trees time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- Ext中包含了几个以get开头的方法
Ext中包含了几个以get开头的方法,这些方法可以用来得到文档中DOM.得到当前文档中的组件.得到Ext元素等,在使用中要注意区别使用.1.get方法get方法用来得到一个Ext元素,也就是类型为Ex ...
- Java 的Object类
1.toString()是Objectde的方法,如果不重写,直接输出对象或者用对象调用toString()输出是会输出包名.类名@对象哈希码的无符号十六进制表示 子类如果重写了这个方法,可以隐式调用 ...
- MySQL 同步状态
Exec_Master_Log_Pos: The position of the last event executed by the SQL thread from the master's bin ...