首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Mac 下 Unity C# System.Drawing.Bitmap 缺少 libgdiplus 解決方案

     編輯:程式設計綜合問答

錯誤

DllNotFoundException: libgdiplus.dylib
System.Drawing.GDIPlus..cctor ()
TypeInitializationException

原因

System.Drawing 依賴 GDI+ 原生庫。Windows 內建 gdiplus.dll,Mac/Linux 需安裝 libgdiplus(Mono 提供的 GDI+ 實現)。

解決方案

方案一:安裝 libgdiplus (推薦)

# macOS (Homebrew)
brew install mono-libgdiplus
# 或
brew install libgdiplus

# 確認動態庫位置
find /usr/local -name "libgdiplus.dylib" 2>/dev/null
# 通常在 /usr/local/lib/libgdiplus.dylib

Unity 編輯器運行時會自動加載該路徑。若仍報錯,嘗試設置 DYLD_LIBRARY_PATH 或將 libgdiplus.dylib 複製到專案 Assets/Plugins。

方案二:避免使用 System.Drawing (跨平台最佳)

Unity 提供純 managed 圖像 API,無需原生依賴:

  • Texture2D.LoadImage(byte[]):從 PNG/JPG 字節數組載入。
  • ImageConversion.LoadImage(Texture2D, byte[]):同上。
  • Texture2D.ReadPixels/EncodeToPNG/EncodeToJPG:像素讀寫。
  • UnityEngine.ImageConversion:靜態工具類。

替代代碼示例

// 原代碼 (僅 Windows)
Bitmap bitmap = (Bitmap)Bitmap.FromFile(path, false);
Color c = bitmap.GetPixel(x, y);

// Unity 跨平台寫法
byte[] bytes = System.IO.File.ReadAllBytes(path);
Texture2D tex = new Texture2D(2, 2);
tex.LoadImage(bytes); // 自動識別 PNG/JPG
Color c = tex.GetPixel(x, y);
// 使用完銷毀
Destroy(tex);

注意事項

  • Unity 2018+ 推薦使用 async/await + UnityWebRequestTexture 加載網絡圖片。
  • System.Drawing 在 Unity 中**不受官方支持**,打包到 iOS/Android 會失敗。
  • 若必須用 GDI+ 功能(繪圖、字體渲染),考慮 SkiaSharp (跨平台 2D 圖形庫) 或 ImageSharp (純 C#)。

總結

Mac 上 Unity 使用 System.Drawing.Bitmap 需安裝 libgdiplus,但**強烈建議改用 Unity 內建 Texture2D 或 SkiaSharp/ImageSharp 實現跨平台圖像處理**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved