Unity使用LoadImage 读取byte[]图片时,会出现白边问题
直接上代码
/// <summary> /// 修复图片导入时白边问题 /// </summary> /// <param name="texture"></param> public static void FixTransparency(this Texture2D texture) { Color32[] pixels = texture.GetPixels32(); int w = texture.width; int h = texture.height; for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { int idx = y * w + x; Color32 pixel = pixels[idx]; if (pixel.a == 0) { bool done = false; if (!done && x > 0) done = TryAdjacent(ref pixel, pixels[idx - 1]); // Left pixel if (!done && x < w-1) done = TryAdjacent(ref pixel, pixels[idx + 1]); // Right pixel if (!done && y > 0) done = TryAdjacent(ref pixel, pixels[idx - w]); // Top pixel if (!done && y < h-1) done = TryAdjacent(ref pixel, pixels[idx + w]); // Bottom pixel pixels[idx] = pixel; } } } texture.SetPixels32(pixels); texture.Apply(); } private static bool TryAdjacent(ref Color32 pixel, Color32 adjacent) { if (adjacent.a == 0) return false; pixel.r = adjacent.r; pixel.g = adjacent.g; pixel.b = adjacent.b; return true; }
在Unity Answers中发现了一个大牛写的png文件会有白边的原因分析,Messy Alpha Problem,大概是因为PhotoShop中,会把100% Transparent的地方默认颜色值设为白色,这样会导致在Runtime时,做图片interpolation运算时候,由于这样100%Transparent点的干扰使用会出现白边的情况,大牛提出的解决方法是,在PS中,利用插件为这些100%Transparent点,填充上相邻像素点的颜色,而由于我们的图片资源太多了,让美术一个一个改图片也不现实,所以参考了一段Google上的代码,通过代码来完成了PS中插线的工作流程.PNG transparency has white border/halo,在这个问题中有这段代码.至此问题基本解决,但是貌似性能消耗太多
参考链接:https://www.cnblogs.com/luckisnow/p/4642467.html
分类:
Unity
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~