如何将流数据转换为对象

本文关键字:转换 对象 数据 | 更新日期: 2023-09-27 18:16:42

我有一个存储图像资源,字体资源等的dll…

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

这是我到目前为止的代码。

        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的混合组件。画

如何将流数据转换为对象

您可以使用图像。在System.Drawing命名空间中的FromStream方法将流转换为图像(确保首先在程序集中添加对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);
    }
}