miplevel | 要获取的 mipmap 级别。范围为 0 到纹理的 Texture.mipmapCount。默认值为 0 。 |
Color[] 包含像素颜色的数组。
将 mipmap 级别上的像素颜色数据作为 Color 结构获取。
此方法从 CPU 内存中的纹理获取像素数据。 Texture.isReadable 必须为 true
。
该数组按行存储像素,从纹理的左下角开始。数组的大小为 mipmap 级别宽度×高度。
每个像素都是一个 Color 结构。 GetPixels
可能比某些其他纹理方法慢,因为它会将纹理使用的格式转换为 Color。 GetPixels
还需要解压缩压缩纹理,并使用内存来存储解压缩区域。要更快地获取像素数据,请改用 GetPixelData。
一次调用 GetPixels
通常比多次调用 GetPixel 快,尤其是在大型纹理中。
如果 GetPixels
失败,Unity 会抛出异常。如果数组包含过多的数据, GetPixels
可能失败。对于非常大的纹理,请改用 GetPixelData 或 GetRawTextureData。
您不能对使用 Crunch 纹理压缩的纹理使用 GetPixel
。请改用 GetPixels32。
using UnityEngine;
public class Texture2DExample : MonoBehaviour { public Texture2D source; public Texture2D destination;
void Start() { // Get a copy of the color data from the source Texture2D, in high-precision float format. // Each element in the array represents the color data for an individual pixel. int sourceMipLevel = 0; Color[] pixels = source.GetPixels(sourceMipLevel);
// If required, manipulate the pixels before applying them to the destination Texture2D. // This example code reverses the array, which rotates the image 180 degrees. System.Array.Reverse(pixels, 0, pixels.Length);
// Set the pixels of the destination Texture2D. int destinationMipLevel = 0; destination.SetPixels(pixels, destinationMipLevel);
// Apply changes to the destination Texture2D, which uploads its data to the GPU. destination.Apply(); } }
x | 要获取的部分的起始 x 位置。 |
y | 要获取的部分的起始 y 位置。 |
blockWidth | 要获取的部分的宽度。 |
blockHeight | 要获取的部分的高度。 |
miplevel | 要读取的 mipmap 级别。范围为 0 到纹理的 Texture.mipmapCount。默认值为 0 。 |
Color[] 包含像素颜色的数组。
将 mipmap 级别部分上的像素颜色数据作为 Color 结构获取。
此版本的 GetPixels
返回 mipmap 级别的一部分,而不是整个 mipmap 级别。
// Get a rectangular area of a texture and place it into // a new texture the size of the rectangle. using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { // Source texture and the rectangular area we want to extract. public Texture2D sourceTex; public Rect sourceRect;
void Start() { int x = Mathf.FloorToInt(sourceRect.x); int y = Mathf.FloorToInt(sourceRect.y); int width = Mathf.FloorToInt(sourceRect.width); int height = Mathf.FloorToInt(sourceRect.height);
Color[] pix = sourceTex.GetPixels(x, y, width, height); Texture2D destTex = new Texture2D(width, height); destTex.SetPixels(pix); destTex.Apply();
// Set the current object's texture to show the // extracted rectangle. GetComponent<Renderer>().material.mainTexture = destTex; } }