Как изменить размер и сохранить Texture2D в XNA?

Я понял, что должен использовать .all(), как в этом примере, чтобы убедиться, что все ингредиенты были в запрашиваемом списке, но, как было упомянуто в комментариях, это не решает проблему без учета регистра:

if (!recipeQuery.getIngredients().isEmpty()) {
            Criteria categories = Criteria.where("ingredients").all(recipeQuery.getIngredients());
            query.addCriteria(categories);
        }

это решает проблему также

if (!recipeQuery.getIngredients().isEmpty()) {
            Criteria categories = new Criteria();
            categories.andOperator(recipeQuery.getIngredients().stream()
                    .map(i -> Criteria.where("ingredients").regex(".*" + i + ".*", "i"))
                    .toArray(Criteria[]::new));
            query.addCriteria(categories);
        }
5
задан Ben S 19 March 2009 в 22:18
поделиться

4 ответа

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

Этот простой пример показывает, как Вы могли сделать это. Проигнорируйте установку 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);
    }
}
11
ответ дан 13 December 2019 в 19:36
поделиться

Вы попробовали Texture2D.Save ()?

0
ответ дан 13 December 2019 в 19:36
поделиться

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

Конечно, Вы могли писать игру Zune, что означает, что я, вероятно, выключен о масштабировании там, но, так или иначе.

Я не думаю, что можно сохранить масштабированный образ непосредственно от XNA, но, Вы могли использовать класс Изображения WinForms для загрузки изображения, и затем масштабироваться это к размерам в редакторе уровней и сохранить его отступает к диску.

Если Ваша структура не является BMP или PNG, хотя, Вам, вероятно, придется использовать команду Texture2D.Save() для преобразования его в формат, можно использовать в классе Изображения.

Этот поток мог бы помочь Вам с использованием класса Изображения. http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/6fe3d353-0b09-440b-95c9-701efdc9e20a/

0
ответ дан 13 December 2019 в 19:36
поделиться

У меня есть такой код, который увеличивает / уменьшенная копия текстуры, но через некоторое время я получаю ошибки. После 30 изменений размера я получаю исключение, не в первый раз.

Кажется, проблема с целью рендеринга, но я не уверен. Интересно, появятся ли у вас и эти исключения, если вы тоже будете часто запускать этот код?

0
ответ дан 13 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: