代码之家  ›  专栏  ›  技术社区  ›  Domenic

将.dds转换为.png:XNA真的这么复杂吗?

  •  1
  • Domenic  · 技术社区  · 14 年前

    found out about 这个 DevIL.NET library

    但是,这就是我的想法。。。

    • 好吧,看起来我想要这个 Texture2D 我可以打电话给你 myTexture2D.SaveAsPng .
    • 但是我如何从我的.dds文件中得到一个呢?文档似乎表明我想用 myContentManager.Load<Texture2D> .
    • 哦,糟了,那不是,那是某种游戏内容管理系统。嗯,我的搜索似乎发现了很多 myTexture2D.LoadFile 我会去的。
    • 呃,我是不是少了一个程序集引用什么的?哦,不,我明白了,他们在3.1到4.0之间删除了这个方法,太棒了。好吧,有点烦,但是 myTexture2D.LoadStream 不是什么问题。
    • 等等,这是什么?它想要一个 GraphicsDevice ? 嗯,看起来一个人通常是通过 GraphicsDeviceManager ... 哦,等等,我不会再走那条路了,不会了 Manager 这是给我的。
    • 我想我应该手动实例化这个东西。好吧,这并不难。。。 var myGraphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.HiDef, (哦,这是什么 PresentationParameters 好吧,我试试看 new PresentationParameters()); .
    • DeviceWindowHandle 在我的 ?

    所以我真的希望有一个不那么复杂的方法来做这件事;也许是某种违约 我可以用。仅仅为了将.dds转换为.png而创建一个完整的窗口感觉很傻。

    2 回复  |  直到 8 年前
        1
  •  4
  •   Community CDub    8 年前

    如果您有一个需要创建XNA图形设备的命令行应用程序,那么 this answer 应该有所帮助。

    WinForms sample 为了避免在创建图形设备服务等(特别是类)时乱来 ServiceContainer GraphicsDeviceService

    然后你可以这样做:

    Form form = new Form(); // Dummy form for creating a graphics device
    GraphicsDeviceService gds = GraphicsDeviceService.AddRef(form.Handle,
            form.ClientSize.Width, form.ClientSize.Height);
    
    ServiceContainer services = new ServiceContainer();
    services.AddService<IGraphicsDeviceService>(gds);
    content = new ContentManager(services, "Content");
    

    塔达-现在你有工作了 ContentManager 你可以用来装东西。我相信你应该能得到 GraphicsDevice 图形设备服务 ,也是。

    您创建的窗体从不显示。记住参考 System.Windows.Forms.dll 在你的项目中。

    免责声明:这是为XNA3.1编写的。我还没有在4.0中测试过它,但我怀疑它只需很少或根本没有修改就可以工作。

        2
  •  3
  •   Marcus Riemer    14 年前

    • 对于XNA,数据类型的转换不是常见的场景。它希望通过内容管道对所有资产进行预处理。
    • XNA经常希望使用图形设备,而无窗口应用程序超出了XNAs的范围。