我有一个.dds文件,我想要一个.png文件。虽然我已经found out about DevIL.NET library,但是一个静态类的API设计没有并行化,所以我希望找到另一种方法。这导致我去了XNA。
但是,这就是我对这个想法的了解......
Texture2D
课程;然后我可以致电myTexture2D.SaveAsPng
。myContentManager.Load<Texture2D>
。myTexture2D.LoadFile
的用法;我会去那。myTexture2D.LoadStream
并不是真正的问题。GraphicsDevice
?嗯,看起来人们通常会通过GraphicsDeviceManager
得到其中一个......哦等等,我不会再次沿着这条路走下去了,对我来说不再是Manager
。var myGraphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.HiDef,
(呃哦这个PresentationParameters
是什么东西好吧我会尝试new PresentationParameters());
。DeviceWindowHandle
中的PresentationParameters
? 但我正在运行一个控制台应用程序!! 所以我真的希望有一种不太复杂的方式来做这件事;也许某种我可以使用的默认GraphicsDevice
。创建一个整个窗口只是为了将.dds转换为.png。
对于我的转换问题的其他建议欢迎,我想,虽然理解如何从一般的非XNA代码中使用XNA可能是值得的。
答案 0 :(得分:4)
如果您有一个需要创建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");
Tada - 现在你有一个可以用来加载东西的工作ContentManager
。我相信您也应该能够从GraphicsDevice
获得实际的GraphicsDeviceService
。
您永远不会显示您创建的表单。请记住在项目中引用System.Windows.Forms.dll
。
免责声明:这是为XNA 3.1编写的。我没有在4.0中测试它,但我怀疑它可以很少或没有修改。
答案 1 :(得分:3)
从我的头顶(暂时没有使用XNA):
在我看来,你正在使用错误的工具来完成这项工作,虽然除了你已经解雇的DevIL之外我无法告诉另一个工具。