Объявление
public static byte[] EncodeArrayToEXR(Array array, Experimental.Rendering.GraphicsFormat format, uint width, uint height, uint rowBytes, Texture2D.EXRFlags flags);Параметры
array | Массив байтов для преобразования. |
format | Пиксельный формат данных изображения. |
width | Ширина данных изображения в пикселях. |
height | Высота данных изображения в пикселях. |
rowBytes | Длина одной строки в байтах. |
flags | Флаги, используемые для управления сжатием и выходным форматом. |
Описание
Кодирует этот массив в формат EXR.
Эта функция возвращает массив байтов, который представляет собой данные файла EXR. Запишите эти данные на диск, чтобы получить данные в формате файла EXR.
Эту функцию лучше всего использовать для форматов текстур HDR (16-битных или 32-битных с плавающей запятой). Выходной формат по умолчанию — 16-битный EXR с плавающей запятой.
Закодированные данные EXR всегда будут содержать альфа-канал.
Для одноканальных красных текстур ( R8
, R16
, RFloat
и RHalf
), закодированные данные будут в оттенках серого.
Этот метод является потокобезопасным.
Если передать rowBytes значение 0, длина строки в байтах будет автоматически рассчитана.
// 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);
}
}
Смотрите так же: EncodeToEXR, EncodeNativeArrayToEXR, EncodeArrayToPNG, EncodeArrayToJPG, EncodeArrayToTGA.