1

.ddsファイルがあり、.pngファイルが必要です。DevIL.NETライブラリについてはすでに知っていますが、ある静的クラスのAPI設計は並列化されていないため、別のメソッドを見つけたいと思っています。これが私をXNAに導きました。

しかし、これが私がそのアイデアでどこまで得たかです...

  • Texture2DOK、このクラスが必要なようです。その後、私は呼び出すことができますmyTexture2D.SaveAsPng
  • しかし、.ddsファイルからそれらの1つを取得するにはどうすればよいですか?さて、ドキュメントは私が使いたいことを示しているようですmyContentManager.Load<Texture2D>
  • ああ、それはそうではありませんでした、それはある種のゲームコンテンツ管理システムです。さて、私の検索は多くの用途を見つけたようですmyTexture2D.LoadFile; 私はそのために行きます。
  • アセンブリ参照などがありませんか?いいえ、わかりました。3.1から4.0の間で、そのメソッドが削除されました。すばらしいです。OK、まあ、それはもう少し厄介ですが、myTexture2D.LoadStream実際には問題ではありません。
  • これは今何ですか?欲しいGraphicsDevice?うーん、それは通常、それらの1つを経由して取得するように見えGraphicsDeviceManagerます...ああ、待ってください、私は再びその道を進むことはありません、私にとってこれ以上Managerのことはありません。
  • 私はこれを手動でインスタンス化することになっていると思います。OK、これはそれほど難しいことではありません... var myGraphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.HiDef,(ええと、これは何ですか? PresentationParametersOK私は試してみnew PresentationParameters());ます。
  • まあそれは例外を投げました。彼らは望んでいます...DeviceWindowHandle私の中にPresentationParametersしかし、私はコンソールアプリを実行しています!!

ですから、これを行うためのより複雑でない方法があることを本当に望んでいます。おそらく、私が使用できるある種のデフォルトですGraphicsDevice。.ddsを.pngに変換するためだけにウィンドウ全体を作成するのはかなりばかげています。

私の変換問題の代替案は歓迎されますが、一般的に非XNAコードからXNAを使用する方法を理解することはおそらく価値があります。

4

2 に答える 2

4

XNAグラフィックデバイスを作成する必要があるコマンドラインアプリがある場合、この回答のコードはある程度役に立ちます。

一言で言えば、グラフィックスデバイスサービスなど(具体的にはクラスと)の作成に煩わされることを避けるために、 WinFormsサンプルのいくつかのクラスが必要です。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ものをロードするために使用できる作業ができました。GraphicsDeviceからも実際の情報が得られるはずだと思いますGraphicsDeviceService

作成したフォームは表示されません。System.Windows.Forms.dllプロジェクトで参照することを忘れないでください。

免責事項:これはXNA3.1用に作成されました。4.0ではテストしていませんが、ほとんどまたはまったく変更を加えなくても機能すると思います。

于 2010-10-04T10:05:25.710 に答える
3

頭のてっぺんから(しばらくXNAを使用していません):

  • データ型の変換は、XNAの一般的なシナリオではありません。すべてのアセットがコンテンツパイプラインによって前処理されることを期待しています。
  • XNAはグラフィックスデバイスを非常に頻繁に想定しており、ウィンドウレスアプリケーションはXNAの範囲外です。

あなたがその仕事に間違ったツールを使用しているように私には思えますが、あなたがすでに却下したDevILを除いて、私は別のツールを言うことができませんでした。

于 2010-10-03T09:02:26.120 に答える