本人最近做了一个拍照并打印的程序,使用到了多种图片编辑功能,现在罗列一下,希望对大家有所帮助。

裁剪,将贴图上的某个区域裁剪

    /// <summary>/// 裁剪Texture2D/// </summary>/// <param name="originalTexture"></param>/// <param name="offsetX"></param>/// <param name="offsetY"></param>/// <param name="originalWidth"></param>/// <param name="originalHeight"></param>/// <returns></returns>public static Texture2D ScaleTextureCutOut(Texture2D originalTexture, int offsetX,int offsetY, float originalWidth, float originalHeight){Texture2D newTexture = new Texture2D(Mathf.CeilToInt(originalWidth), Mathf.CeilToInt(originalHeight));int maxX = originalTexture.width - 1;int maxY = originalTexture.height - 1;for (int y = 0; y < newTexture.height; y++){for (int x = 0; x < newTexture.width; x++){float targetX = x + offsetX;float targetY = y + offsetY;int x1 = Mathf.Min(maxX, Mathf.FloorToInt(targetX));int y1 = Mathf.Min(maxY, Mathf.FloorToInt(targetY));int x2 = Mathf.Min(maxX, x1 + 1);int y2 = Mathf.Min(maxY, y1 + 1);float u = targetX - x1;float v = targetY - y1;float w1 = (1 - u) * (1 - v);float w2 = u * (1 - v);float w3 = (1 - u) * v;float w4 = u * v;Color color1 = originalTexture.GetPixel(x1, y1);Color color2 = originalTexture.GetPixel(x2, y1);Color color3 = originalTexture.GetPixel(x1, y2);Color color4 = originalTexture.GetPixel(x2, y2);Color color = new Color(Mathf.Clamp01(color1.r * w1 + color2.r * w2 + color3.r * w3 + color4.r * w4),Mathf.Clamp01(color1.g * w1 + color2.g * w2 + color3.g * w3 + color4.g * w4),Mathf.Clamp01(color1.b * w1 + color2.b * w2 + color3.b * w3 + color4.b * w4),Mathf.Clamp01(color1.a * w1 + color2.a * w2 + color3.a * w3 + color4.a * w4));newTexture.SetPixel(x, y, color);}}newTexture.anisoLevel = 2;newTexture.Apply();return newTexture;}

缩放,缩放和放大原有贴图

/// <summary>
/// 缩放Textur2D
/// </summary>
/// <param name="source"></param>
/// <param name="targetWidth"></param>
/// <param name="targetHeight"></param>
/// <returns></returns>
public static Texture2D ScaleTexture(Texture2D source, float targetWidth, float targetHeight)
{Texture2D result = new Texture2D((int)targetWidth, (int)targetHeight, source.format, false);float incX = (1.0f / targetWidth);float incY = (1.0f / targetHeight);for (int i = 0; i < result.height; ++i){for (int j = 0; j < result.width; ++j){Color newColor = source.GetPixelBilinear((float)j / (float)result.width, (float)i / (float)result.height);result.SetPixel(j, i, newColor);}}result.Apply();return result;
}

水平镜像

//水平翻转public static Texture2D HorizontalFlipTexture(Texture2D texture){//得到图片的宽高int width = texture.width;int height = texture.height;Texture2D flipTexture = new Texture2D(width, height);for (int i = 0; i < width; i++){flipTexture.SetPixels(i, 0, 1, height, texture.GetPixels(width - i - 1, 0, 1, height));}flipTexture.Apply();return flipTexture;}

垂直镜像

// 垂直翻转public static Texture2D VerticalFlipTexture(Texture2D texture){//得到图片的宽高int width = texture.width;int height = texture.height;Texture2D flipTexture = new Texture2D(width, height);for (int i = 0; i < height; i++){flipTexture.SetPixels(0, i, width, 1, texture.GetPixels(0, height - i - 1, width, 1));}flipTexture.Apply();return flipTexture;}

逆时针旋转90度

/// <summary>/// 图片逆时针旋转90度/// </summary>/// <param name="src">原图片二进制数据</param>/// <param name="srcW">原图片宽度</param>/// <param name="srcH">原图片高度</param>/// <param name="desTexture">输出目标图片</param>public static Texture2D RotationLeft90(Color32[] src, int srcW, int srcH){Color32[] des = new Color32[src.Length];Texture2D desTexture = new Texture2D(srcH, srcW);//if (desTexture.width != srcH || desTexture.height != srcW)//{//    desTexture.Resize(srcH, srcW);//}for (int i = 0; i < srcW; i++){for (int j = 0; j < srcH; j++){des[i * srcH + j] = src[(srcH - 1 - j) * srcW + i];}}desTexture.SetPixels32(des);desTexture.Apply();return desTexture;}

顺时针旋转90度

/// <summary>/// 图片顺时针旋转90度/// </summary>/// <param name="src">原图片二进制数据</param>/// <param name="srcW">原图片宽度</param>/// <param name="srcH">原图片高度</param>/// <param name="desTexture">输出目标图片</param>public static Texture2D RotationRight90(Color32[] src, int srcW, int srcH){Color32[] des = new Color32[src.Length];Texture2D desTexture = new Texture2D(srcH, srcW);for (int i = 0; i < srcH; i++){for (int j = 0; j < srcW; j++){des[(srcW - j - 1) * srcH + i] = src[i * srcW + j];}}desTexture.SetPixels32(des);desTexture.Apply();return desTexture;}

两张贴图合并,可以实现水印等功能,该代码是我实现3行3列9张相同照片排列

    /// <summary>/// 两张图合并/// </summary>/// <param name="_baseTexture2D"></param>/// <param name="_texture2D"></param>/// <param name="_x"></param>/// <param name="_y"></param>/// <param name="_w"></param>/// <param name="_h"></param>/// <returns></returns>public static Texture2D MergeImage(Texture2D _baseTexture2D, Texture2D _texture2D,int _x,int _y,int _w,int _h){//取图Color32[] color = _texture2D.GetPixels32(0);for (int j = 0; j < 3; j++){for (int i = 0; i < 3; i++){_baseTexture2D.SetPixels32(_x + i * (_texture2D.width+ _w), _y + j * (_texture2D.height+_h), _texture2D.width, _texture2D.height, color); //宽度}}//应用_baseTexture2D.Apply();return _baseTexture2D;}

修改图片的水平和垂直分辨率(像素/英寸,每英寸距离的图像包含的像素数目。)

Bitmap操作需要用到System.Drawing.dll,请自行下载!

    /// <summary>/// 修改图片水平和垂直像素量/// </summary>public static Texture2D SetPictureResolution(string _path){Bitmap bm = new Bitmap(_path);bm.SetResolution(300, 300);string _idPath = Application.persistentDataPath + "/";string _name = "print.jpg";bm.Save(_idPath + _name, ImageFormat.Jpeg);Texture2D tex = loadTexture(_idPath, _name);File.WriteAllBytes(Application.persistentDataPath + "/aa.jpg", tex.EncodeToJPG());bm.Dispose();return tex;}

Unity Texture2D的裁剪、镜像、翻转、缩放、合并、分辨率相关推荐

  1. python openCV 实现镜像翻转flip()

    python openCV 实现镜像翻转flip() 文章目录: 一.基本认知 二.代码实现 一.基本认知 图像的几何变换是指在不改变图像像素值的前提下对图像像素进行空间几何变换. 常见的几何变换有: ...

  2. OpenCV下三对点计算仿射变换实现图像的水平镜像(翻转)的详细说明和源程序

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 图像的仿射变换是指在空间直角坐标系中将一个二维坐 ...

  3. Android自拍相机应用——图片的镜像翻转

    Android系统相机在使用前置摄像头拍照的时候,最终会将拍下的画面做镜像翻转,来达到真实的视角效果,但由于Android手机大多将前置摄像头摆在左右两边(iPhone在靠中间的位置,效果会好很多), ...

  4. 前端实现图片快速反转替换_在canvas上实现元素图片镜像翻转动画效果的方法

    一.Canvas图片水平镜像翻转效果预览 demo页面中点击图片动画效果可见. 二.Canvas上实现图片镜像翻转的实现 CSS中要想实现元素的翻转效果,比较简单,例如我们希望某一张图片水平镜像翻转, ...

  5. 基于OpenCV做图像数据增强(平移、镜像、缩放、旋转、仿射)

    前言: 基于OpenCV的基本使用,对图像的数据量进行数据增强,使得框架对神经网络进行训练,提高模型的鲁棒性以及准确性. 原图: 1.平移 平移通过自定义平移矩阵以及函数warpAffine实现: 代 ...

  6. PyTorch :transforms 数据增强:裁剪、翻转、旋转

    在之前课程中,我们已经熟悉了 PyTorch 中 transforms 的运行机制,它提供了大量的图像增强方法,例如裁剪.旋转.翻转等等,以及可以自定义实现增强方法.本节课中,我们将进一步学习 tra ...

  7. flash图片如何镜像翻转_在canvas上实现元素图片镜像翻转动画效果的方法

    这篇文章主要介绍了在canvas上实现元素图片镜像翻转动画效果的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧! 一.Canvas图片水平镜像翻转效果预览 ...

  8. 前端实现图片快速反转替换_HTML5开发之canvas实现元素图片镜像翻转动画效果的方法...

    一.Canvas图片水平镜像翻转效果预览 您可以狠狠的点击这里:canvas图片水平镜像翻转动画demo demo页面中点击图片动画效果可见. 二.Canvas上实现图片镜像翻转的实现 CSS中要想实 ...

  9. PHP图片裁剪_图片缩放_PHP生成缩略图

    2019独角兽企业重金招聘Python工程师标准>>> 在制作网页过程中,为了排版整齐美观,对网页中的图片处理成固定大小尺寸的图片,或是要截去图片边角中含有水印的图片,对于图片量多, ...

  10. 【深度学习入门到精通系列】Python批量实现图像镜像翻转

    ''' Python批量实现图像镜像翻转 函数:DataAugment() 函数功能:扩大数据量 输入参数:dir_path----图片库路径 '''import cv2 import os impo ...

最新文章

  1. ImageView / Text 使用 android:state_pressed 没有效果的处理方法
  2. include_once 问题
  3. 快手有佳人|2020快手女性人群价值报告
  4. iPhone软件开发新突破,真正VoIP通话
  5. MySQL 跳过权限校验
  6. python实现录音小程序 界面_微信小程序录音界面以及功能实现
  7. 策略模式应用场景_朱迪 | 混合研究方法的方法论、研究策略及应用:以消费模式研究为例...
  8. 深度学习-吴恩达-笔记-7-超参数调试、Batch正则化和程序框架
  9. python装饰器解析请求参数_我如何在装饰器中获得Flask可选的URL参数?
  10. MySQL常用SQL语句大全
  11. Mybatis的pooled连接池工作原理
  12. unity中世界坐标与局部坐标
  13. 小宁百度了php一句话,赛宁平台web题解(一)
  14. 每天下午5点使用计算机结束时断开终端的连,在每天下午5点使用计算机结束时断开终端的连接属于()...
  15. 如何备份android10,安卓手机系统怎么备份
  16. 第二篇supervisor集群管理工具cesi安装详解-如何安装supervisor-cesiwebUI
  17. 《2022中国企业数字化办公创新与实践产业研究报告》附下载丨三叠云
  18. 利用Python实现中文转拼音
  19. h5 vr效果_Web端VR初介绍
  20. 【flutter】打渠道包-多渠道脚本打包

热门文章

  1. wordpress主题模板开发制作教程
  2. viso 2013 如何增加连接点【画多条直线】
  3. 安装nodejs遇到的坑
  4. MySQL备份与恢复
  5. Mac谷歌浏览器关闭自动更新,下载历史版本方法,解决不自动提示保存密码的问题
  6. 基因型填充中的phasing究竟是什么
  7. Java连接wincc_WinCC中访问SQL SERVER数据库
  8. echarts树图tree制作家谱教程
  9. 利用树制作的简易家谱
  10. cad怎么把图层英文变成中文_CAD图层中英文对照表.pdf