array | 要转换的字节数组。 |
format | 图像数据像素格式。 |
width | 图像数据宽度,单位为像素。 |
height | 图像数据高度,单位为像素。 |
rowBytes | 按字节计的单行长度。默认为 0,表示 Unity 自动计算长度。 |
将此数组编码成 PNG 格式。
此方法返回一个字节数组,即 PNG 文件数据。您可以将编码后的数据存储为文件或无需进一步处理直接通过网络发送。
此方法不适用于任何已压缩格式。编码后的 PNG 数据将是 8 位灰度、RGB 或 RGBA(取决于传入的格式)。对于单通道红色纹理(R8
、R16
、RFloat
和 RHalf
),编码后的 PNG 数据将以灰度显示。PNG 数据不包含伽马校正或色彩配置文件信息。
此方法是线程安全的。
// Saves screenshot as PNG file. using System.Collections; using System.IO; using UnityEngine;
public class PNGScreenSaver : MonoBehaviour { // Take a shot immediately IEnumerator Start() { yield return SaveScreenPNG(); }
IEnumerator SaveScreenPNG() { // Read the screen buffer after rendering is complete yield return new WaitForEndOfFrame();
// Create a texture in RGB24 format the size of the screen int width = Screen.width; int height = Screen.height; Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);
// Read the screen contents into the texture tex.ReadPixels(new Rect(0, 0, width, height), 0, 0); tex.Apply();
// Encode the bytes in PNG format byte[] bytes = ImageConversion.EncodeArrayToPNG(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.png", bytes); } }