Version: 2023.1
public static bool LoadImage (Texture2D tex, byte[] data, bool markNonReadable);

参数

tex 要将图像加载到的纹理。
data 包含要加载的图像数据的字节数组。
markNonReadable 默认设置为 false,传递 true 可以有选择地将该纹理标记为不可读。

返回

bool 如果可以加载数据,则返回 true,否则返回 false。

描述

Loads PNG, JPG or EXR image byte array into a texture.

The LoadImage function replaces texture contents with new image data. This function can also change texture size and format. JPG files are loaded into RGB24 format, PNG files are loaded into ARGB32 format, and EXR files are loaded into RGBAFloat. If texture format before calling LoadImage is DXT1 or DXT5, then the loaded image will be DXT5-compressed for JPG and PNG images. EXR images and/or any other compression format will result in an uncompressed image. Unity returns false if your platform cannot use the compressed format on the GPU. Use SystemInfo.IsFormatSupported to check if your platform supports a format.

Loading an EXR image is only supported on PC, Mac and Linux. Unity can load both tiled and untiled EXR images, but doesn't support the following features: Interpreting channel names and layers. Unity interprets the channels as ABGR if there are four channels, as BGR with full opacity if there are three channels, and as Y (grayscale) if there's one channel. For example, Unity reads an EXR texture with a single channel named "heightmap" as a grayscale image, stores channels named "X", "Y" and "Z" in the blue, green and red channels respectively, interprets "Y-RY-BY" as RGB data instead of as a luminance/chroma image, and doesn't treat layers with channel names like "leftView.R" differently. Embedded mipmaps. Unity generates mipmap levels from the full-resolution image instead. Multipart images. Deep images. Chromaticity coordinates. 纹理将自动上传到 GPU;没有必要调用 Apply

This function loads the texture data without gamma correction. If the texture data uses the sRGB color space, you must use an sRGB Texture2D object for correct rendering results. Likewise, if the texture data uses the linear color space, then you must use a linear Texture2D object. (A Texture2D object is sRGB if its linear constructor parameter was false, which is the default, and linear if the parameter was set to true.)

Note: In previous versions of Unity, texture data from all PNG textures containing a gAMA block was returned in gamma 2.0 space. If you want to retain this old behavior, for example when working with older projects that dynamically load textures using LoadImage, set ImageConversion.EnableLegacyPngGammaRuntimeLoadBehavior to true.

using UnityEngine;

public class ExampleClass : MonoBehaviour { // Load a .jpg or .png file by adding .bytes extensions to the file // and dragging it on the imageAsset variable. public TextAsset imageAsset; public void Start() { // Create a texture. Texture size does not matter, since // LoadImage will replace with the size of the incoming image. Texture2D tex = new Texture2D(2, 2); ImageConversion.LoadImage(tex, imageAsset.bytes); GetComponent<Renderer>().material.mainTexture = tex; } }

另请参阅:EncodeToPNGEncodeToJPGLoadRawTextureData 函数。

using UnityEngine;

public class ExampleScript : MonoBehaviour { public void Start() { // Create a texture. Texture size does not matter, since // LoadImage will replace with the size of the incoming image. Texture2D tex = new Texture2D(2, 2); // A small 64x64 Unity logo encoded into a PNG. byte[] pngBytes = new byte[] { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x02, 0x2E, 0x02, 0x00, 0x00, 0x01, 0x57, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xA5, 0x57, 0xD1, 0xAD, 0xC4, 0x30, 0x08, 0x83, 0x81, 0x32, 0x4A, 0x66, 0xC9, 0x36, 0x99, 0x85, 0x45, 0xBC, 0x4E, 0x74, 0xBD, 0x8F, 0x9E, 0x5B, 0xD4, 0xE8, 0xF1, 0x6A, 0x7F, 0xDD, 0x29, 0xB2, 0x55, 0x0C, 0x24, 0x60, 0xEB, 0x0D, 0x30, 0xE7, 0xF9, 0xF3, 0x85, 0x40, 0x74, 0x3F, 0xF0, 0x52, 0x00, 0xC3, 0x0F, 0xBC, 0x14, 0xC0, 0xF4, 0x0B, 0xF0, 0x3F, 0x01, 0x44, 0xF3, 0x3B, 0x3A, 0x05, 0x8A, 0x41, 0x67, 0x14, 0x05, 0x18, 0x74, 0x06, 0x4A, 0x02, 0xBE, 0x47, 0x54, 0x04, 0x86, 0xEF, 0xD1, 0x0A, 0x02, 0xF0, 0x84, 0xD9, 0x9D, 0x28, 0x08, 0xDC, 0x9C, 0x1F, 0x48, 0x21, 0xE1, 0x4F, 0x01, 0xDC, 0xC9, 0x07, 0xC2, 0x2F, 0x98, 0x49, 0x60, 0xE7, 0x60, 0xC7, 0xCE, 0xD3, 0x9D, 0x00, 0x22, 0x02, 0x07, 0xFA, 0x41, 0x8E, 0x27, 0x4F, 0x31, 0x37, 0x02, 0xF9, 0xC3, 0xF1, 0x7C, 0xD2, 0x16, 0x2E, 0xE7, 0xB6, 0xE5, 0xB7, 0x9D, 0xA7, 0xBF, 0x50, 0x06, 0x05, 0x4A, 0x7C, 0xD0, 0x3B, 0x4A, 0x2D, 0x2B, 0xF3, 0x97, 0x93, 0x35, 0x77, 0x02, 0xB8, 0x3A, 0x9C, 0x30, 0x2F, 0x81, 0x83, 0xD5, 0x6C, 0x55, 0xFE, 0xBA, 0x7D, 0x19, 0x5B, 0xDA, 0xAA, 0xFC, 0xCE, 0x0F, 0xE0, 0xBF, 0x53, 0xA0, 0xC0, 0x07, 0x8D, 0xFF, 0x82, 0x89, 0xB4, 0x1A, 0x7F, 0xE5, 0xA3, 0x5F, 0x46, 0xAC, 0xC6, 0x0F, 0xBA, 0x96, 0x1C, 0xB1, 0x12, 0x7F, 0xE5, 0x33, 0x26, 0xD2, 0x4A, 0xFC, 0x41, 0x07, 0xB3, 0x09, 0x56, 0xE1, 0xE3, 0xA1, 0xB8, 0xCE, 0x3C, 0x5A, 0x81, 0xBF, 0xDA, 0x43, 0x73, 0x75, 0xA6, 0x71, 0xDB, 0x7F, 0x0F, 0x29, 0x24, 0x82, 0x95, 0x08, 0xAF, 0x21, 0xC9, 0x9E, 0xBD, 0x50, 0xE6, 0x47, 0x12, 0x38, 0xEF, 0x03, 0x78, 0x11, 0x2B, 0x61, 0xB4, 0xA5, 0x0B, 0xE8, 0x21, 0xE8, 0x26, 0xEA, 0x69, 0xAC, 0x17, 0x12, 0x0F, 0x73, 0x21, 0x29, 0xA5, 0x2C, 0x37, 0x93, 0xDE, 0xCE, 0xFA, 0x85, 0xA2, 0x5F, 0x69, 0xFA, 0xA5, 0xAA, 0x5F, 0xEB, 0xFA, 0xC3, 0xA2, 0x3F, 0x6D, 0xFA, 0xE3, 0xAA, 0x3F, 0xEF, 0xFA, 0x80, 0xA1, 0x8F, 0x38, 0x04, 0xE2, 0x8B, 0xD7, 0x43, 0x96, 0x3E, 0xE6, 0xE9, 0x83, 0x26, 0xE1, 0xC2, 0xA8, 0x2B, 0x0C, 0xDB, 0xC2, 0xB8, 0x2F, 0x2C, 0x1C, 0xC2, 0xCA, 0x23, 0x2D, 0x5D, 0xFA, 0xDA, 0xA7, 0x2F, 0x9E, 0xFA, 0xEA, 0xAB, 0x2F, 0xDF, 0xF2, 0xFA, 0xFF, 0x01, 0x1A, 0x18, 0x53, 0x83, 0xC1, 0x4E, 0x14, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82, }; // Load data into the texture. ImageConversion.LoadImage(tex, pngBytes);

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