Unity中对一张2D图片进行旋转

这段时间项目中碰到要让用户选择本地相册或调用手机摄像头拍摄后的图片进行简单的旋转并上传到服务器的需求,关于打开本地相册和调用摄像头的部分这里先略过,这篇文章主要讲讲当拿到本地的图片后怎样对图片进行简单的旋转。

首先,因为要上传到服务器,所以这里对图片的旋转必须对Texture本身进行操作,故我用到了Texture2D类里的方法:GetPixel和SetPixel,GetPixel用来获取坐标为(x,y)的像素点的颜色,即参数为int x和int y,返回值为Color;SetPixel则用来设置新的像素点,参数为int x、int y及Color。一张2D Texture由width*height个像素点组成,想象一张网格图,每个网格对应一个像素点,则每个像素的横坐标在[0,width - 1]内,纵坐标在[0,height - 1]内。假设我们要将图片顺时针旋转90°,由于Unity中的坐标原点在图的左下角,故一个坐标为(x,y)的像素点旋转90°后的坐标变为了(y,width - 1 - x),对每个像素点进行这样的坐标变换就可实现图片的旋转了。具体代码如下。

public class TextureRotate
{
  Texture2D texture = new Texture2D(300, 400);
  int width = texture.width;  //图片原本的宽度
  int height = texture.height;  //图片原本的高度
  Texture2D newTexture = new Texture2D(height,width); //实例化一个新的texture,高度是原来的宽度,宽度是原来的高度

  public Texture2D rotate()
  {
    for (int i = 0; i < width - 1; i++) {
      for (int j = 0; j < height - 1; j++) {
        Color color = texture.GetPixel(i,j);
        newTexture.SetPixel(j, width - 1 - i, color);
      }
    }
    newTexture.Apply();
    return newTexture;
  }
}


你可能感兴趣的:(工作经验)