我在Unity项目中工作,用户在其中选择用于制作 Texture2D 并粘贴到模型的图像文件( .bmp 格式),我创建了下一个代码,可以很好地处理 .png 和 .jpg 文件,但是当我尝试加载 .bmp 时,我只有一个(我假设)默认纹理带有红色的?"符号,所以我认为是针对图像格式的,如何在运行时使用 .bmp 文件创建纹理?
I'm working in a Unity Project where the user choose image files (in .bmp format) that is used to make a Texture2D and pasted to a model, I create the next code, I work fine with .png and .jpg file, but when I try load .bmp I got only a (I assume) default texture with a red "?" symbol, so I think is for the image format, how can I create a Texture using .bmp files at run-time?
这是我的代码:
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; } 推荐答案Texture2D.LoadImage 函数仅用于将PNG/JPG图像字节数组加载到 Texture 中.它不支持 .bmp ,因此红色符号通常意味着损坏的图像或未知的图像.
The Texture2D.LoadImage function is only used to load PNG/JPG image byte array into a Texture. It doesn't support .bmp so the red symbol which usually means corrupted or unknown image is expected.
要在Unity中加载 .bmp 图像格式,您必须阅读并理解 .bmp 格式规范,然后实现将其字节数组转换为Unity的Texture的方法.幸运的是,这已经由另一个人完成了.抓住 BMPLoader 插件 此处 .
To load .bmp image format in Unity, you have to read and understand the .bmp format specification then implement a method that converts its byte array into Unity's Texture. Luckily, this has already been done by another person. Grab the BMPLoader plugin here.
要使用它,请使用B83.Image.BMP 命名空间包含:
To use it, include the using B83.Image.BMP namespace:
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 功能:
You can also skip the File.ReadAllBytes(filePath); part and pass the .bmp image path directly to the BMPLoader.LoadBMP function:
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; }更多推荐
如何在运行时使用.bmp文件并在Unity中创建纹理?
发布评论