2010-10-03 3 views
1

У меня есть .dds-файл, и я хочу файл .png. Хотя я уже found out aboutDevIL.NET library, дизайн API там одного статического класса не распараллеливается, поэтому я надеюсь найти другой метод. Это привело меня к XNA.Преобразование .dds в .png: XNA действительно это запутанное?

Но вот как далеко я с этой идеей ...

  • ОК, это выглядит, как я хочу это Texture2D класса; то я могу позвонить myTexture2D.SaveAsPng.
  • Но как я могу получить один из них из моего .dds-файла? Ну, похоже, документация указывает, что я хочу использовать myContentManager.Load<Texture2D>.
  • О, дерьмо, это не он, это какая-то система управления контентом. Ну, мой поиск, похоже, привлек много пользы от myTexture2D.LoadFile; Я пойду за этим.
  • У меня отсутствует ссылка на сборку или еще что-то? О нет, я понял, они удалили этот метод между 3.1 и 4.0, удивительный. Хорошо, ну, это немного более раздражает, но myTexture2D.LoadStream на самом деле не проблема.
  • Ждать, что это сейчас? Он хочет GraphicsDevice? Хм, похоже, что один из них получает один из них через GraphicsDeviceManager ... о, подождите, я больше не пойду по этому пути, не более Manager s для меня.
  • Я предполагаю, что я должен создать экземпляр этой вещи вручную. Хорошо хорошо это не так уж трудно ... var myGraphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.HiDef, (Ой-ой, что это PresentationParameters вещь хорошо Хорошо, я просто попробую new PresentationParameters());.
  • Ну что бросил исключение. Они хотят ... в мой PresentationParameters? DeviceWindowHandle НО я бегаю консольного приложения !!

Так что я очень надеюсь, что есть менее запутанный способ сделать это,., возможно, какой-то по умолчанию GraphicsDevice я мог бы использовать это чувствует себя довольно глупо, чтобы создать целое окно для конвертации .dds в .png.

Альтернативные предложения для моего преобразования м, я думаю, хотя, вероятно, было бы полезно понять, как использовать XNA из кода, отличного от XNA, в целом.

ответ

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

Тада - теперь у вас есть рабочий ContentManager, который можно использовать для загрузки материала. Я считаю, что вы должны получить фактический GraphicsDevice от GraphicsDeviceService.

Форма, которую вы создаете, никогда не отображается. Не забудьте указать System.Windows.Forms.dll в вашем проекте.

Отказ от ответственности: Это было написано для XNA 3.1. Я не тестировал его в 4.0, но я подозреваю, что он будет работать с небольшими изменениями или без них.

3

От верхней части головы (не использовали XNA на некоторое время):

  • Преобразование типов данных не является общим сценарием для XNA. Он рассчитывает получить все активы, предварительно обработанные конвейером контента.
  • XNA ожидает, что графическое устройство довольно часто, приложения без окон выходят из области XNAs.

Мне кажется, что вы используете неправильный инструмент для работы, хотя я не мог сказать другого, кроме DevIL, который вы уже уволили.