当前位置:  开发笔记 > 编程语言 > 正文

如何在XNA中调整和保存Texture2D?

如何解决《如何在XNA中调整和保存Texture2D?》经验,为你挑选了1个好方法。

在我为XNA游戏制作的关卡编辑器(编辑器也在XNA中)我允许缩放Texture2D对象.

当用户试图保存关卡时,我想实际调整磁盘上的图像文件大小,这样就不需要在游戏中进行缩放.

有没有一种简单的方法可以从缩放的Texture2D对象创建图像文件(首选PNG)?



1> Leaf Garland..:

您可以通过渲染到所需大小的渲染目标来缩放纹理,然后保存渲染目标纹理.

这个简单的例子说明了如何做到这一点.忽略GraphicsDevice的设置,这只是为了制作一个小的自包含示例.有趣的是创建渲染目标并绘制缩放纹理.您应该尽可能地重用渲染目标(所有相同大小的图像都可以重用渲染目标).

using System;
using System.Runtime.InteropServices;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

class Program
{
    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern IntPtr GetConsoleWindow();

    static void Main(string[] args)
    {
        string sourceImagePath = args[0];
        string destinationImagePath = args[1];
        int desiredWidth = int.Parse(args[2]);
        int desiredHeight = int.Parse(args[3]);

        GraphicsDevice graphicsDevice = new GraphicsDevice(
            GraphicsAdapter.DefaultAdapter,
            DeviceType.Hardware,
            GetConsoleWindow(),
            new PresentationParameters());
        SpriteBatch batch = new SpriteBatch(graphicsDevice);

        Texture2D sourceImage = Texture2D.FromFile(
            graphicsDevice, sourceImagePath);

        RenderTarget2D renderTarget = new RenderTarget2D(
            graphicsDevice, 
            desiredWidth, desiredHeight, 1, 
            SurfaceFormat.Color);

        Rectangle destinationRectangle = new Rectangle(
            0, 0, desiredWidth, desiredHeight);

        graphicsDevice.SetRenderTarget(0, renderTarget);

        batch.Begin();
        batch.Draw(sourceImage, destinationRectangle, Color.White);
        batch.End();

        graphicsDevice.SetRenderTarget(0, null);

        Texture2D scaledImage = renderTarget.GetTexture();
        scaledImage.Save(destinationImagePath, ImageFileFormat.Png);
    }
}


这是我最终实现的最接近的.虽然我没有使用kernel32 import或GetConsoloWindow,但我只使用了我的Game对象中的GraphicsDevice.
推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有