【问题标题】:How to convert stream data to object?如何将流数据转换为对象?
【发布时间】:2015-10-08 13:32:23
【问题描述】:

我有一个 dll 用于存储图像资源、字体资源等...

我在程序集中有一个类,它有一个返回方法,我希望能够从 dll 中提取资源并将它们作为 abject 返回,然后我可以将其转换为相应的类型。

这是我目前的代码。

        public class GetResource
    {
            public static T LoadDllResource<T>(string ResourceFolder, string resourceName, string Extension, int width = 10, int height = 10)
            {
                Assembly myAssembly = Assembly.GetExecutingAssembly();
                Stream myStream = myAssembly.GetManifestResourceStream(myAssembly.GetName().Name + "." + ResourceFolder + "." + resourceName + "." + Extension);

// convert stream to object by doing something like this (I'm not sure)
//return (T)Convert.ChangeType(EndResultOFStreamConversion, typeof(object));
            }
    }

并以这种方式使用它

    Font SomeFont1=  GetResource.LoadDllResource<Font>("Resources","Splash","ttf")

UnityEngine.Texture2D SomeImage2=  GetResource.LoadDllResource<UnityEngine.Texture2D>("Resources","SnowImage","png")

如果问题有问题,请告诉我。感谢您的帮助!

我在 Unity 引擎中工作,它不能很好地支持使用 System.Drawing 的混合程序集

【问题讨论】:

    标签: c# dll methods stream


    【解决方案1】:

    您可以使用System.Drawing 命名空间中的Image.FromStream Method 将流转换为图像(请务必先将 System.Drawing.dll 的引用添加到您的程序集中)。我不太清楚你所说的“字体资源”是什么意思,但我会这样做:

    public class GetResource
    {
        public Image GetImageFromResource(string resourceFolder, string resourceName, string extension)
        {
            return Image.FromStream(this.GetStreamFromResource(resourceFolder, resourceName, extension), true);
        }
    
        private Stream GetStreamFromResource(string ResourceFolder, string resourceName, string Extension)
        {
            Assembly myAssembly = Assembly.GetExecutingAssembly();
            return myAssembly.GetManifestResourceStream(myAssembly.GetName().Name + "." + ResourceFolder + "." + resourceName + "." + Extension);
    
        }
    }
    

    【讨论】:

    • 哦,我不需要使用 System.Drawing 来执行此操作,呵呵。我不知道。不幸的是,我在 UnityEngine 中工作,而 UnityEngien 在混合程序集中不支持 System.Drawing。我将编辑问题以包含它。谢谢。哦,还有。我只需要让方法处理的不仅仅是 Image 类型。但 String、Font、Texture2D 等任何其他类。
    • 我没有使用 Unity 的经验。但是,您不应该在您的问题中使用通用方法。这将要求您检查 T 的类型(如果 T = image .. if T = font ..),这是一种非常糟糕的做法,永远不应该使用。
    • 我怎样才能返回我试图从 dll 中提取的 (T) 类型的对象?如果我想要来自 dll 的字体文件,我会说 `Font SomeFont1= GetResource.LoadDllResource("Resources","Splash","ttf")` 如果我想要 Texture2D 图像,我会说 UnityEngine.Texture2D SomeImage2= GetResource.LoadDllResource&lt;UnityEngine.Texture2D&gt;("Resources","SnowImage","png") 并且只是需要指出的是,在自动生成的资源设计器中,我将 System.Drawing.Bitmap 替换为 UnityEngine.Texture2D
    猜你喜欢
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 2011-05-20
    相关资源
    最近更新 更多