uinty本地图片的读取和剪裁
2016-05-17 18:28
597 查看
//读取图片
public Texture2D loadTexture(string FullPath )
{
//创建文件读取流
FileStream fileStream = new FileStream(FullPath, FileMode.Open, FileAccess.Read);
fileStream.Seek(0, SeekOrigin.Begin);
//创建文件长度缓冲区
byte[] bytes = new byte[fileStream.Length];
//读取文件
fileStream.Read(bytes, 0, (int)fileStream.Length);
//释放文件读取流
fileStream.Close();
fileStream.Dispose();
fileStream = null;
//创建Texture
int width = 1024;
int height = 1024;
Texture2D texture = new Texture2D(width, height);
texture.LoadImage(bytes);
return texture;
}
/// <summary>
/// 正方型裁剪
/// 以图片中心为轴心,截取正方型,然后等比缩放
/// 用于头像处理
/// </summary>
/// <param name="texture">要处理的图片</param>
/// <param name="saveurl">保存路径</param>
/// <param name="side">指定的边长(正方型)</param>
public void CutForSquare(Texture2D texture, string saveurl,int side)
{
Texture2D tex;
int TextureWidth = texture.width;//图片的宽
int TextureHeight = texture.height;//图片的高
//如果图片的高和宽都比side大
if (TextureWidth > side && TextureHeight > side)
{
tex = new Texture2D(side, side);
UnityEngine.Color[] col = texture.GetPixels((TextureWidth - side) / 2, (TextureWidth - side) / 2, side, side);
tex.SetPixels(0, 0, side, side, col);
tex.Apply();
byte[] btr = tex.EncodeToPNG();
File.WriteAllBytes(saveurl, btr);
}
//如果图片的宽或高小于side
if (TextureWidth < side || TextureHeight < side)
{
int TextureSide = Mathf.Min(TextureWidth, TextureHeight);
tex = new Texture2D(TextureSide, TextureSide);
UnityEngine.Color[] col = texture.GetPixels((TextureWidth - TextureSide) / 2, (TextureHeight - TextureSide) / 2, TextureSide, TextureSide);
tex.SetPixels(0, 0, TextureSide, TextureSide, col);
tex.Apply();
byte[] btr = tex.EncodeToPNG();
File.WriteAllBytes(saveurl, btr);
}
}
public Texture2D loadTexture(string FullPath )
{
//创建文件读取流
FileStream fileStream = new FileStream(FullPath, FileMode.Open, FileAccess.Read);
fileStream.Seek(0, SeekOrigin.Begin);
//创建文件长度缓冲区
byte[] bytes = new byte[fileStream.Length];
//读取文件
fileStream.Read(bytes, 0, (int)fileStream.Length);
//释放文件读取流
fileStream.Close();
fileStream.Dispose();
fileStream = null;
//创建Texture
int width = 1024;
int height = 1024;
Texture2D texture = new Texture2D(width, height);
texture.LoadImage(bytes);
return texture;
}
/// <summary>
/// 正方型裁剪
/// 以图片中心为轴心,截取正方型,然后等比缩放
/// 用于头像处理
/// </summary>
/// <param name="texture">要处理的图片</param>
/// <param name="saveurl">保存路径</param>
/// <param name="side">指定的边长(正方型)</param>
public void CutForSquare(Texture2D texture, string saveurl,int side)
{
Texture2D tex;
int TextureWidth = texture.width;//图片的宽
int TextureHeight = texture.height;//图片的高
//如果图片的高和宽都比side大
if (TextureWidth > side && TextureHeight > side)
{
tex = new Texture2D(side, side);
UnityEngine.Color[] col = texture.GetPixels((TextureWidth - side) / 2, (TextureWidth - side) / 2, side, side);
tex.SetPixels(0, 0, side, side, col);
tex.Apply();
byte[] btr = tex.EncodeToPNG();
File.WriteAllBytes(saveurl, btr);
}
//如果图片的宽或高小于side
if (TextureWidth < side || TextureHeight < side)
{
int TextureSide = Mathf.Min(TextureWidth, TextureHeight);
tex = new Texture2D(TextureSide, TextureSide);
UnityEngine.Color[] col = texture.GetPixels((TextureWidth - TextureSide) / 2, (TextureHeight - TextureSide) / 2, TextureSide, TextureSide);
tex.SetPixels(0, 0, TextureSide, TextureSide, col);
tex.Apply();
byte[] btr = tex.EncodeToPNG();
File.WriteAllBytes(saveurl, btr);
}
}
相关文章推荐
- Git Gui for Windows的建库、克隆(clone)、上传(push)、下载(pull)、合并
- Spark SQL下的Parquet使用最佳实践和代码实战
- xcodebuild自动化打包失败,返回65
- CI 笔记 easyui 结合后,左侧导航跳转问题
- Android学习之Build.xml文件
- Arithmetic Sequence(dp)
- SPOJ PT07J Query on a tree II
- xcodebuild打包失败返回65
- POJ 1904 King's Quest 强连通分量+二分图增广判定
- 5.UIButton
- xcodebuild命令打包失败解决方法
- easyUI的datagrid实现分页
- 开发时间缩短90% Amaze UI助H5梦工场响应式网站快速上线
- POJ 1986 Distance Queries【LCA】
- 获取手机信息(UIDevice、NSLocale、NSBundle)
- String, StringBuilder, StringBuffer问题
- kendo.ui.Grid绑定单双击事件
- QT中使用QPainter在ui子控件中绘图
- IOS UITextView placeholder 添加提示信息
- UITextField键盘弹出遮挡的解决