版本: Unity 6 (6000.0)
语言英语
  • C#

Texture2D.LoadRawTextureData

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们会阅读用户提出的每一个建议变更,并在适用时进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public void LoadRawTextureData(byte[] data);

声明

public void LoadRawTextureData(NativeArray<T> data);

声明

public void LoadRawTextureData(IntPtr data, int size);

参数

data 要使用的数组数据。
size 数据的字节大小。

描述

设置整个纹理的原始数据在 CPU 内存中。

此方法为纹理在 CPU 内存中设置像素数据。 Texture.isReadable 必须为 true,并且您必须在调用 LoadRawTextureData 后调用 Apply 将更改的像素上传到 GPU。

您还可以使用以下方法写入纹理

  • Texture2D.SetPixelData,它可用于设置mipmap 级别而不是整个纹理。
  • GetRawTextureData,它返回一个 NativeArray,您可以在其中写入,并且可能更快,因为它可以避免复制内存。

data 数组的大小必须根据其宽度、高度和 mipmapCount 填充整个纹理,并且数据布局必须与纹理格式匹配。否则 LoadRawTextureData 失败。

例如,如果纹理是 16 × 8 像素,并且格式为 RGBA32 且没有 mipmap,则数组必须为 512 字节大小(16 × 8 × 4 字节)。您可以使用实验性的 GraphicsFormatUtility.ComputeMipmapSize API 计算 mipmap 级别的大小。

该数组必须从 mipmap 级别 0 开始。

其他资源:SetPixelsSetPixels32SetPixelDataApplyGetRawTextureDataImageConversion.LoadImage

using UnityEngine;

public class ExampleScript : MonoBehaviour { public void Start() { // Create a 16 x 16 texture with PVRTC RGBA4 format and fill it with raw PVRTC bytes. Texture2D tex = new Texture2D(16, 16, TextureFormat.PVRTC_RGBA4, false);

// Raw PVRTC4 data for a 16 x 16 texture. // This format is four bits per pixel, so the data should be 128 (16 x 16 / 2) bytes in size. // The texture encoded here is mostly green with some angular blue and red lines. byte[] pvrtcBytes = new byte[] { 0x30, 0x32, 0x32, 0x32, 0xe7, 0x30, 0xaa, 0x7f, 0x32, 0x32, 0x32, 0x32, 0xf9, 0x40, 0xbc, 0x7f, 0x03, 0x03, 0x03, 0x03, 0xf6, 0x30, 0x02, 0x05, 0x03, 0x03, 0x03, 0x03, 0xf4, 0x30, 0x03, 0x06, 0x32, 0x32, 0x32, 0x32, 0xf7, 0x40, 0xaa, 0x7f, 0x32, 0xf2, 0x02, 0xa8, 0xe7, 0x30, 0xff, 0xff, 0x03, 0x03, 0x03, 0xff, 0xe6, 0x40, 0x00, 0x0f, 0x00, 0xff, 0x00, 0xaa, 0xe9, 0x40, 0x9f, 0xff, 0x5b, 0x03, 0x03, 0x03, 0xca, 0x6a, 0x0f, 0x30, 0x03, 0x03, 0x03, 0xff, 0xca, 0x68, 0x0f, 0x30, 0xaa, 0x94, 0x90, 0x40, 0xba, 0x5b, 0xaf, 0x68, 0x40, 0x00, 0x00, 0xff, 0xca, 0x58, 0x0f, 0x20, 0x00, 0x00, 0x00, 0xff, 0xe6, 0x40, 0x01, 0x2c, 0x00, 0xff, 0x00, 0xaa, 0xdb, 0x41, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe8, 0x40, 0x01, 0x1c, 0x00, 0xff, 0x00, 0xaa, 0xbb, 0x40, 0xff, 0xff, };

// Load data into the texture and upload it to the GPU. tex.LoadRawTextureData(pvrtcBytes); tex.Apply();

// Assign the texture to this GameObject's material. GetComponent<Renderer>().material.mainTexture = tex; } }