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 ...
随机推荐
- JAVA事件监听机制学习
//事件监听机制 import java.awt.*; import java.awt.event.*; public class TestEvent { public static void mai ...
- LINQ To SQL && Lambda 使用方法小结 (转)
1. 查询Student表中的所有记录的Sname.Ssex和Class列.select sname,ssex,class from studentLinq: from s in Students ...
- UITableviewCell 重用内存
转载自:http://www.cnblogs.com/tangbinblog/p/3371545.html 重用实现分析 查看UITableView头文件,会找到NSMutableArray* vi ...
- FTP 1.0
自己写的可以实现文件的下载(必须自己知道文件名),还有很多要优化. 譬如:不能看可以下载的文件,输入错误无法处理,不能处理多个用户,每次只能下载一个结束,服务器没有完成守护进程:没有用函数封装,简化m ...
- ural1028 Stars
Stars Time limit: 0.25 secondMemory limit: 64 MB Astronomers often examine star maps where stars are ...
- ssl通信c实现
/*File:client.c *Auth:sjin *Date:2014-03-11 * */ #include <stdio.h>#include <string.h>#i ...
- Android学习笔记之Intent
Intent是Activity之间的管道 可以用来做Acitivity的跳转或传递数据 protected void onCreate(Bundle savedInstanceState) { sup ...
- 二叉堆(C#)
参考:http://www.cnblogs.com/skywang12345/p/3610390.html using System; using System.Collections.Generic ...
- CSS——京东首页实战总结
第一天成果 1.浮动的盒子不要给宽,内容撑起盒子的宽 在前端设计中,一般不给浮动的盒子设置宽,让其用内容撑起一个高度. 2.小三角的表示 ◇用一个盒子(盒子宽为字的宽,高度为字高度的一半)去截取这个菱 ...
- flexpaper二次开发
1.首先下载FlexPaper的源码.下载地址 2.本人不懂flash,只是百度下,然后自己瞎弄弄的.我用的flash build 4.5 提供个key:1499-4181-9296-6452-299 ...