如何在运行时使用.bmp文件并在Unity中创建纹理?

时间:2018-08-22 22:26:18

标签: c# unity3d textures bmp texture2d

我正在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;
}

1 个答案:

答案 0 :(得分:4)

Texture2D.LoadImage函数仅用于将PNG / JPG图像字节数组加载到Texture中。它不支持.bmp,因此红色符号通常意味着损坏或未知的图像。

要在Unity中加载.bmp图像格式,您必须阅读并了解.bmp格式规范,然后实现将其字节数组转换为Unity的Texture的方法。幸运的是,这已经由另一个人完成了。抓住 BMPLoader 插件here

要使用它,请包含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;
}

您还可以跳过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;
}