我从RawImage.texture中利用Texture2D截取了一张图片,但是我现在想要根据矩形在这张图片的正中间,截取一张100*100的图片
时间: 2024-02-13 11:01:26 浏览: 62
可以按照以下步骤来实现:
1. 获取RawImage的Texture2D。
```csharp
Texture2D sourceTexture = (Texture2D)rawImage.texture;
```
2. 计算矩形左下角在原始图片中的像素坐标。
```csharp
int x = sourceTexture.width / 2 - 50;
int y = sourceTexture.height / 2 - 50;
```
这里假设要截取的图片在原始图片中居中,所以左下角的像素坐标为原始图片宽度和高度的一半减去50(截取图片大小的一半)。
3. 截取指定大小的部分。
```csharp
int width = 100;
int height = 100;
Color[] pixels = sourceTexture.GetPixels(x, y, width, height);
Texture2D newTexture = new Texture2D(width, height);
newTexture.SetPixels(pixels);
newTexture.Apply();
```
这里利用Texture2D的GetPixels方法获取指定区域的像素信息,然后创建新的Texture2D并将像素信息设置到新的Texture2D中。
最终的代码如下:
```csharp
// 获取RawImage的Texture2D
Texture2D sourceTexture = (Texture2D)rawImage.texture;
// 计算矩形左下角在原始图片中的像素坐标
int x = sourceTexture.width / 2 - 50;
int y = sourceTexture.height / 2 - 50;
// 截取指定大小的部分
int width = 100;
int height = 100;
Color[] pixels = sourceTexture.GetPixels(x, y, width, height);
Texture2D newTexture = new Texture2D(width, height);
newTexture.SetPixels(pixels);
newTexture.Apply();
```
注意:如果RawImage的Texture2D是从网络或者磁盘中加载的,需要等待加载完成后再进行截取操作。可以使用协程来等待加载完成后再执行截取操作。
阅读全文