58 lines
1.7 KiB
C#
58 lines
1.7 KiB
C#
using UnityEngine;
|
|
using System;
|
|
|
|
public class DrawUtils {
|
|
|
|
private static Color32[] rotateSquare(Color32[] arr, double phi, Texture2D originTexture)
|
|
{
|
|
int x;
|
|
int y;
|
|
int i;
|
|
int j;
|
|
double sn = Math.Sin(phi);
|
|
double cs = Math.Cos(phi);
|
|
Color32[] arr2 = originTexture.GetPixels32();
|
|
int W = originTexture.width;
|
|
int H = originTexture.height;
|
|
int xc = W / 2;
|
|
int yc = H / 2;
|
|
for (j = 0; j < H; j++)
|
|
{
|
|
for (i = 0; i < W; i++)
|
|
{
|
|
arr2[j * W + i] = new Color32(0, 0, 0, 0);
|
|
x = (int)(cs * (i - xc) + sn * (j - yc) + xc);
|
|
y = (int)(-sn * (i - xc) + cs * (j - yc) + yc);
|
|
if ((x > -1) && (x < W) && (y > -1) && (y < H))
|
|
{
|
|
arr2[j * W + i] = arr[y * W + x];
|
|
}
|
|
}
|
|
}
|
|
return arr2;
|
|
}
|
|
|
|
public static Texture2D RotateImage(Texture2D originTexture, int angle)
|
|
{
|
|
Texture2D result;
|
|
result = new Texture2D(originTexture.width, originTexture.height);
|
|
Color32[] pix1 = result.GetPixels32();
|
|
Color32[] pix2 = originTexture.GetPixels32();
|
|
int W = originTexture.width;
|
|
int H = originTexture.height;
|
|
int x = 0;
|
|
int y = 0;
|
|
Color32[] pix3 = rotateSquare(pix2, (Math.PI / 180 * (double)angle), originTexture);
|
|
for (int j = 0; j < H; j++)
|
|
{
|
|
for (var i = 0; i < W; i++)
|
|
{
|
|
pix1[result.width / 2 - W / 2 + x + i + result.width * (result.height / 2 - H / 2 + j + y)] = pix3[i + j * W];
|
|
}
|
|
}
|
|
result.SetPixels32(pix1);
|
|
result.Apply();
|
|
return result;
|
|
}
|
|
}
|