Edu*_*ona 3 c# textures bmp texture2d unity-game-engine
我在一个 Unity 项目中工作,用户选择.bmp用于制作Texture2D并粘贴到模型的图像文件(格式),我创建了下一个代码,我可以正常使用.png和.jpg文件,但是当我尝试加载时,.bmp我得到了只有(我假设)带有红色“?”的默认纹理 符号,所以我认为是图像格式,如何.bmp在运行时使用文件创建纹理?
这是我的代码:
public static Texture2D LoadTexture(string filePath)
{
Texture2D tex = null;
byte[] fileData;
if (File.Exists(filePath))
{
fileData = File.ReadAllBytes(filePath);
tex = new Texture2D(2, 2);
tex.LoadImage(fileData);
}
return tex;
}
Run Code Online (Sandbox Code Playgroud)
该Texture2D.LoadImage函数仅用于将 PNG/JPG 图像字节数组加载到Texture. 它不支持.bmp所以红色符号通常意味着损坏或未知的图像是预期的。
要.bmp在 Unity 中加载图像格式,您必须阅读并理解.bmp格式规范,然后实现将其字节数组转换为 Unity 的纹理的方法。幸运的是,这已经由另一个人完成了。在此处获取BMPLoader插件。
要使用它,请包含using B83.Image.BMP命名空间:
public static Texture2D LoadTexture(string filePath)
{
Texture2D tex = null;
byte[] fileData;
if (File.Exists(filePath))
{
fileData = File.ReadAllBytes(filePath);
BMPLoader bmpLoader = new BMPLoader();
//bmpLoader.ForceAlphaReadWhenPossible = true; //Uncomment to read alpha too
//Load the BMP data
BMPImage bmpImg = bmpLoader.LoadBMP(fileData);
//Convert the Color32 array into a Texture2D
tex = bmpImg.ToTexture2D();
}
return tex;
}
Run Code Online (Sandbox Code Playgroud)
也可以跳过该File.ReadAllBytes(filePath);部分,.bmp直接将图像路径传递给BMPLoader.LoadBMP函数:
public static Texture2D LoadTexture(string filePath)
{
Texture2D tex = null;
if (File.Exists(filePath))
{
BMPLoader bmpLoader = new BMPLoader();
//bmpLoader.ForceAlphaReadWhenPossible = true; //Uncomment to read alpha too
//Load the BMP data
BMPImage bmpImg = bmpLoader.LoadBMP(filePath);
//Convert the Color32 array into a Texture2D
tex = bmpImg.ToTexture2D();
}
return tex;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2771 次 |
| 最近记录: |