Я понял, что должен использовать .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);
}
Можно масштабировать структуры путем рендеринга к цели рендеринга в размере, который Вы хотите и затем сохранение целевой структуры рендеринга.
Этот простой пример показывает, как Вы могли сделать это. Проигнорируйте установку 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);
}
}
Масштабирование изображений обычно не подвергается всему так служебному много, плюс, Вы не хотели бы загружать различные размеры той же структуры в память, как это будет отходами.
Конечно, Вы могли писать игру Zune, что означает, что я, вероятно, выключен о масштабировании там, но, так или иначе.
Я не думаю, что можно сохранить масштабированный образ непосредственно от XNA, но, Вы могли использовать класс Изображения WinForms для загрузки изображения, и затем масштабироваться это к размерам в редакторе уровней и сохранить его отступает к диску.
Если Ваша структура не является BMP или PNG, хотя, Вам, вероятно, придется использовать команду Texture2D.Save() для преобразования его в формат, можно использовать в классе Изображения.
Этот поток мог бы помочь Вам с использованием класса Изображения. http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/6fe3d353-0b09-440b-95c9-701efdc9e20a/
У меня есть такой код, который увеличивает / уменьшенная копия текстуры, но через некоторое время я получаю ошибки. После 30 изменений размера я получаю исключение, не в первый раз.
Кажется, проблема с целью рендеринга, но я не уверен. Интересно, появятся ли у вас и эти исключения, если вы тоже будете часто запускать этот код?