Get a block of pixel colors.
mipWidth=max(1,width>>miplevel)
and similarly for height.The texture must have the Read/Write Enabled flag set in the import settings, otherwise this function will fail.Using GetPixels
can be faster than calling GetPixel repeatedly, especially
for large textures. In addition, GetPixels
can access individual mipmap levels.// Get a rectangular area of a texture and place it into a new // texture the size of the rectangle. // Source texture and the rectangular area we want to extract. var sourceTex: Texture2D; var sourceRect: Rect; function Start () { // The values in the Rect structure are floats, so round them // down to the nearest integer. var x = Mathf.FloorToInt(sourceRect.x); var y = Mathf.FloorToInt(sourceRect.x); var width = Mathf.FloorToInt(sourceRect.width); var height = Mathf.FloorToInt(sourceRect.height); // Get the pixel block and place it into a new texture. var pix = sourceTex.GetPixels(x, y, width, height); var destTex = new Texture2D(width, height); destTex.SetPixels(pix); destTex.Apply(); // Set the current object's texture to show the // extracted rectangle. renderer.material.mainTexture = destTex; }
using UnityEngine; using System.Collections; public class Example : MonoBehaviour { public Texture2D sourceTex; public Rect sourceRect; void Start() { int x = Mathf.FloorToInt(sourceRect.x); int y = Mathf.FloorToInt(sourceRect.x); 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(); renderer.material.mainTexture = destTex; } }
import UnityEngine import System.Collections public class Example(MonoBehaviour): public sourceTex as Texture2D public sourceRect as Rect def Start() as void: x as int = Mathf.FloorToInt(sourceRect.x) y as int = Mathf.FloorToInt(sourceRect.x) width as int = Mathf.FloorToInt(sourceRect.width) height as int = Mathf.FloorToInt(sourceRect.height) pix as (Color) = sourceTex.GetPixels(x, y, width, height) destTex as Texture2D = Texture2D(width, height) destTex.SetPixels(pix) destTex.Apply() renderer.material.mainTexture = destTex
Get a block of pixel colors.
GetPixels
above; it does not return the whole
mip level but only blockWidth
by blockHeight
region starting at x,y.
The block must fit into the used mip level. The returned array is blockWidth*blockHeight size.