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

ImageConversion.EncodeArrayToEXR

建议修改

成功!

感谢您帮助我们改进 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每项修改建议,并在适用的情况下进行更新。

关闭

提交失败

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

关闭

取消

声明

public static byte[] EncodeArrayToEXR(Array array, Experimental.Rendering.GraphicsFormat format, uint width, uint height, uint rowBytes, Texture2D.EXRFlags flags);

参数

array 要转换的字节数组。
format 图像数据的像素格式。
width 图像数据以像素为单位的宽度。
height 图像数据以像素为单位的高度。
rowBytes 单行以字节为单位的长度。默认值为 0,这意味着 Unity 会自动计算长度。
flags 用于控制压缩和输出格式的标志。默认值为 Texture2D.EXRFlags.None

描述

将此数组编码为 EXR 格式。

此函数返回一个字节数组,它是 EXR 文件数据。您可以将编码后的数据存储为文件或将其发送到网络,无需进一步处理。

此函数不适用于任何压缩格式。虽然最好将此函数用于 HDR 纹理格式(16 位或 32 位浮点数),但它也可以用于其他格式(数据会动态转换)。默认输出格式为未压缩的 16 位浮点 EXR,可以使用传入的标志进行控制。编码后的 EXR 数据只有在传入的格式具有 alpha 通道时才会包含 alpha 通道。对于单通道红色纹理( R8R16RFloatRHalf ),编码后的数据将以灰度模式显示。

此方法是线程安全的。

// Saves screenshot as EXR file.
using System.Collections;
using System.IO;
using UnityEngine;

public class EXRScreenSaver : MonoBehaviour { // Take a shot immediately IEnumerator Start() { yield return SaveScreenEXR(); }

IEnumerator SaveScreenEXR() { // Read the screen buffer after rendering is complete yield return new WaitForEndOfFrame();

// Create a texture in RGBAFloat format the size of the screen int width = Screen.width; int height = Screen.height; Texture2D tex = new Texture2D(width, height, TextureFormat.RGBAFloat, false);

// Read the screen contents into the texture tex.ReadPixels(new Rect(0, 0, width, height), 0, 0); tex.Apply();

// Encode the bytes in EXR format byte[] bytes = ImageConversion.EncodeArrayToEXR(tex.GetRawTextureData(), tex.graphicsFormat, (uint)width, (uint)height); Object.Destroy(tex);

// Write the returned byte array to a file in the project folder File.WriteAllBytes(Application.dataPath + "/../SavedScreen.exr", bytes); } }