#unity/日常积累

Texture2D.GetPixels32

public Color32[] GetPixels32 (int miplevel);

描述

获取像素颜色块(Color32 格式)。

该函数返回纹理的整个 Mip 级别的 像素颜色数组。

返回的数组是一个平展 2D 数组,其中像素是从左到右、 从下到上排列(即,逐行排列)的。数组大小为所用 Mip 级别的宽度乘以高度。 默认 Mip 级别为零(基础纹理),在这种情况下,其大小只是该纹理的大小。 在一般情况下,Mip 级别的大小为 mipWidth=max(1,width>>miplevel), 高度也是如此。

该纹理必须在 texture import settings 中设置 read/write enabled 标志,否则此函数将失败。在使用 Crunch 纹理压缩的纹理上,GetPixels32 不可用。

使用 GetPixels32 可比反复调用 GetPixel 更快,尤其是 对于较大纹理而言。此外,GetPixels32 还可访问单独的多级渐进纹理级别。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using UnityEngine;

public class Example : MonoBehaviour
{
    // Rotate an image 180 degrees by reversing the order
    // of the pixels.

    // Source texture.
    Texture2D sourceTex;


    void Start()
    {
        // Get the pixel block and reverse the array to
        // rotate the image.
        var pix = sourceTex.GetPixels32();
        System.Array.Reverse(pix);

        // Copy the reversed image data to a new texture.
        var destTex = new Texture2D(sourceTex.width, sourceTex.height);
        destTex.SetPixels32(pix);
        destTex.Apply();

        // Set the current object's texture to show the
        // rotated image.
        GetComponent<Renderer>().material.mainTexture = destTex;
    }
}