【问题标题】:Converting .dds to .png: is XNA really this convoluted?将 .dds 转换为 .png:XNA 真的这么复杂吗?
【发布时间】:2013-02-04 11:30:51
【问题描述】:

我有一个 .dds 文件,我想要一个 .png 文件。虽然我已经found out aboutDevIL.NET library,但是一个静态类的API设计并没有并行化,所以我希望找到另一种方法。这让我想到了 XNA。

但是,这就是我对这个想法的了解......

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

所以我真的希望有一种不那么复杂的方式来做到这一点;也许我可以使用某种默认的GraphicsDevice。创建一个完整的窗口只是为了将 .dds 转换为 .png 感觉很愚蠢。

我想,欢迎针对我的转换问题提出其他建议,尽管了解如何从一般的非 XNA 代码中使用 XNA 可能是值得的。

【问题讨论】:

    标签: c# xna png image-conversion


    【解决方案1】:

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

    简而言之,您需要 WinForms sample 中的一些类,以避免创建图形设备服务等问题(特别是 ServiceContainerGraphicsDeviceService 类)。

    那么你可以这样做:

    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");
    

    Tada - 现在你有一个工作的ContentManager,你可以用它来加载东西。我相信您也应该能够从GraphicsDeviceService 获得实际的GraphicsDevice

    您创建的表单永远不会显示。记得在你的项目中引用System.Windows.Forms.dll

    免责声明:这是为 XNA 3.1 编写的。我还没有在 4.0 中对其进行测试,但我怀疑它几乎不需要修改就可以工作。

    【讨论】:

      【解决方案2】:

      从我的头顶(暂时没有使用XNA):

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

      在我看来,你使用了错误的工具来完成这项工作,尽管除了 DevIL,我无法告诉其他人,你已经解雇了它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-05
        • 2011-08-09
        • 1970-01-01
        • 2016-08-12
        • 2018-01-29
        • 2023-04-07
        • 2015-10-18
        相关资源
        最近更新 更多