返回介绍

Texture2D.EncodeToPNG 编码为PNG

发布于 2019-12-18 15:38:39 字数 4832 浏览 952 评论 0 收藏 0

JavaScript => public function EncodeToPNG(): byte[];
C# => public byte[] EncodeToPNG();

Description 描述

Encodes this texture into PNG format.

纹理编码为PNG格式。

The returned byte array is the PNG “file”. You can write them to disk to get the PNG file, send them over the network, etc.

返回的byte数组是PNG文件。你可以写入到硬盘获得PNG文件,发送到网络等。

This function works only on ARGB32 and RGB24 texture formats. The texture also has to have Is Readable flag set in the import settings.

该函数仅工作于ARGB32和RGB24格式。该纹理在纹理导入设置必须具有可读写标识。

The encoded PNG data will contain alpha channel for ARGB32 textures, and no alpha channel for RGB24 textures. PNG data will not contain gamma correction or color profile information.

ARGB32格式的PNG纹理包含alpha通道信息,RGB24格式的纹理则没有alpha通道信息,PNG数据不包含伽玛矫正或颜色配置信息。

JavaScript:

	// Saves screenshot as PNG file.
	import System.IO;
 
	// Take a shot immediately
	function Start () {
		UploadPNG ();
	}
 
	function UploadPNG () {
		// We should only read the screen buffer after rendering is complete
		yield WaitForEndOfFrame();
 
		// Create a texture the size of the screen, RGB24 format
		var width = Screen.width;
		var height = Screen.height;
		var tex = new Texture2D (width, height, TextureFormat.RGB24, false);
		// Read screen contents into the texture
		tex.ReadPixels (Rect(0, 0, width, height), 0, 0);
		tex.Apply ();
 
		// Encode texture into PNG
		var bytes = tex.EncodeToPNG();
		Destroy (tex);
 
		// For testing purposes, also write to a file in the project folder
		// File.WriteAllBytes(Application.dataPath + "/../SavedScreen.png", bytes);
 
 
		// Create a Web Form
		var form = new WWWForm();
		form.AddField("frameCount", Time.frameCount.ToString());
		form.AddBinaryData("fileUpload",bytes);
 
		// Upload to a cgi script
		var w = WWW("http://localhost/cgi-bin/env.cgi?post", form);
		yield w;
		if (w.error != null) {
			print(w.error);
		} else {
			print("Finished Uploading Screenshot");
		}
	}

C#:

// Saves screenshot as PNG file.
using UnityEngine;
using System.Collections;
using System.IO;
 
public class PNGUploader : MonoBehaviour {
	// Take a shot immediately
	IEnumerator Start () {
		yield return UploadPNG();
	}
 
	IEnumerator UploadPNG() {
		// We should only read the screen buffer after rendering is complete
		yield return new WaitForEndOfFrame();
 
		// Create a texture the size of the screen, RGB24 format
		int width = Screen.width;
		int height = Screen.height;
		Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);
 
		// Read screen contents into the texture
		tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
		tex.Apply();
 
		// Encode texture into PNG
		byte[] bytes = tex.EncodeToPNG();
		Object.Destroy(tex);
 
		// For testing purposes, also write to a file in the project folder
		// File.WriteAllBytes(Application.dataPath + "/../SavedScreen.png", bytes);
 
 
		// Create a Web Form
		WWWForm form = new WWWForm();
		form.AddField("frameCount", Time.frameCount.ToString());
		form.AddBinaryData("fileUpload",bytes);
 
		// Upload to a cgi script
		WWW w = new WWW("http://localhost/cgi-bin/env.cgi?post", form);
		yield return w;
 
		if (w.error != null) {
			Debug.Log(w.error);
		} else {
			Debug.Log("Finished Uploading Screenshot");
		}
	}
 
}

See Also: ReadPixels, WaitForEndOfFrame, LoadImage, EncodeToJPG.

Texture2D

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文