在Unity中使用System.Drawing将位图载入内存。

问题描述 投票:-1回答:1

使用Unity 2017.4.33f1-Personal。

我正在尝试使用 Image.FromFile 方法在System.Drawing命名空间中加载一个Bitmap到GameObject的逻辑中。 请注意,我对保存这个bmp作为资产或类似的东西不感兴趣。 我只是想把它加载到RAM中,在那里我可以做一些计算。 我已经尝试了下面的方法。

var result = Image.FromFile(
    AssetDatabase.GetAssetPath(mainImg)
) as Bitmap;

但我得到了以下错误

InvalidProgramException: Invalid IL code in System.Drawing.Image:FromFile (string): IL_0000: ret    

顺便说一下,

  • mainImg 是指 Texture2D 资源
  • AssetDatabase.GetAssetPath(mainImg) 决心 Assets/CustomPackages/SeededConstruction/PuzzleBuilder/Input/main.bmp

我还尝试了其他一些愚蠢的方法,包括获取绝对路径和用反斜线代替前进的斜杠,就像这样。

var result = Image.FromFile(    
    Directory.GetCurrentDirectory() 
    + "\\" 
    + AssetDatabase.GetAssetPath(mainTileset)
    .Replace('/', '\\')
) as Bitmap;

在这种情况下,路径解析为 D:\_Projects\2dGenerator\PlatformGeneration\Assets\CustomPackages\SeededConstruction\PuzzleBuilder\Input\main.bmp. 然而,这将返回与上述相同的错误。

我在这里做错了什么? 看起来这种方法在普通的.Net应用程序中工作得很好,为什么在Unity中不行呢?

c# unity3d
1个回答
0
投票

事实证明,这不是任何一种文件路径的问题。 为了在Unity 2017.4.33f1-Personal中正确引用System.Drawing,我采取了以下步骤。

  1. 进入编辑-> 项目设置-> 播放器。 将API Compatability Level从.NET 2.0 Subset改为.NET 2.0。
  2. 添加一个 mcs.rsp 到我的unity项目根Asset文件夹。 在文本编辑器中打开它,在第一行输入: -r:System.Drawing.dll. 保存。
  3. 关闭并重新打开Unity。
© www.soinside.com 2019 - 2024. All rights reserved.