2010-10-03 30 views
1

我有一個.dds文件,我想要一個.png文件。雖然我已經found out aboutDevIL.NET library,那麼一個靜態類的API設計不會並行化,所以我希望找到另一種方法。這導致我到XNA。將.dds轉換爲.png:XNA是否真的如此複雜?

但是,這裏有多遠我有這個想法了......

  • OK,它看起來像我希望這個Texture2D類;那麼我可以撥打myTexture2D.SaveAsPng
  • 但是,如何從我的.dds文件中獲得其中一個?那麼文檔似乎表明我想使用myContentManager.Load<Texture2D>
  • 哦,廢話,那不是它,這是某種遊戲內容管理系統。那麼,我的搜索似乎已經出現了很多使用myTexture2D.LoadFile;我會爲此而努力的。
  • 呃,我是否缺少程序集引用或其他?哦,不,我明白了,他們在3.1和4.0之間移除了這個方法,真棒。好的,好吧,這有點煩人,但myTexture2D.LoadStream不是一個真正的問題。
  • 等一下這是什麼?它想要一個GraphicsDevice?嗯,它看起來像一個通常通過GraphicsDeviceManager其中一個......哦,等等,我不會再走這條道路,對我來說沒有更多的Manager s。
  • 我想我應該手動實例化這個東西。 OK以及這是不是太硬... var myGraphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.HiDef,(嗯哦,這是什麼東西PresentationParameters也OK我就嘗試new PresentationParameters());
  • 嗯,這引發了異常,他們想要的。......在我PresentationParameters一個DeviceWindowHandle但我運行的控制檯APP!

所以我真的很希望有一個這樣做的少令人費解的方式;也許某種默認GraphicsDevice,我可以用的感覺非常愚蠢創建一個完整的窗口只是爲了將.dds轉換爲.png

我的轉換的替代建議有問題我想,儘管從一般的非XNA代碼中理解如何使用XNA可能是值得的。

回答

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

田田 - 現在你有一個工作ContentManager,你可以用它來裝載什麼東西。我相信你也應該能夠從GraphicsDeviceService獲得實際的GraphicsDevice

您創建的表單從不顯示。請記住在您的項目中引用System.Windows.Forms.dll

聲明:這是爲XNA 3.1編寫的。我沒有在4.0版本中測試過它,但我懷疑它可以在很少或根本沒有修改的情況下運行。

3

從我的頭頂(沒有使用XNA一會兒):

  • 轉換數據類型的不是一個XNA常見的情形。它期望獲得內容管道預處理的所有資產。
  • XNA期望經常使用圖形設備,無窗口應用程序不在XNA範圍內。

在我看來,你正在使用錯誤的工作工具,雖然我不能告訴一個又一個魔鬼之外,你已經被解僱。