将.dds转换为.png:XNA真的令人费解吗?

时间:2010-10-03 08:56:18

标签: c# xna png image-conversion

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

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

  • 好的,看起来我想要这个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中的PresentationParameters但我正在运行一个控制台应用程序!!

所以我真的希望有一种不太复杂的方式来做这件事;也许某种我可以使用的默认GraphicsDevice。创建一个整个窗口只是为了将.dds转换为.png。

,这感觉很愚蠢

对于我的转换问题的其他建议欢迎,我想,虽然理解如何从一般的非XNA代码中使用XNA可能是值得的。

2 个答案:

答案 0 :(得分:4)

如果您有一个需要创建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。我相信您也应该能够从GraphicsDevice获得实际的GraphicsDeviceService

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

免责声明:这是为XNA 3.1编写的。我没有在4.0中测试它,但我怀疑它可以很少或没有修改。

答案 1 :(得分:3)

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

  • 数据类型的转换不是XNA的常见方案。它希望获得内容管道预处理的所有资产。
  • XNA非常期待图​​形设备,无窗口应用程序不在XNA范围内。

在我看来,你正在使用错误的工具来完成这项工作,虽然除了你已经解雇的DevIL之外我无法告诉另一个工具。