Как сделать в коде растровое изображение, совместимое с пользовательским интерфейсом Avalonia?

Я хочу иметь фоновое растровое изображение в моем приложении Avalonia. Вывести его на экран легко, но сделать его сложно в коде.

Для отображения у меня в главном окне xaml:

  <Window.Background>
    <ImageBrush Source="{Binding BackgroundImage}"/>
  </Window.Background>

Я могу просто загрузить растровое изображение в модель представления, используя:

  Bitmap loader = new Bitmap( @"C:\image.BMP");
  _backgroundImage = loader;

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

Я много экспериментировал и смотрел образцы, и самое близкое из них:

var brush = new SolidColorBrush(Colors.Blue);
var text = new FormattedText();
text.Text = "A2";
var bitmap = new RenderTargetBitmap(new PixelSize(width, height));
using (IDrawingContextImpl ctx = bitmap.CreateDrawingContext(null))
{
  ctx.DrawText(brush, new Point(0, 0), text); // last param error
}
_backgroundImage = bitmap;

Это нормально, если не считать того факта, что текстовая переменная не может преобразовать из «Avalonia.Media.FormattedText» в «Avalonia.Platform.IFormattedTextImpl». Я экспериментировал с этим, пытался выяснить, чем это отличается от кода Avalonia, но застрял. Что мне не хватает, пожалуйста? (Да, у меня еще нет подробностей о размере текста - сначала нужно освоить основы).


person mj2008    schedule 14.07.2020    source источник


Ответы (1)


Начиная с версий 0.9 и 0.10, вы можете преобразовать IDrawingContextImpl в правильный DrawingContext, передав его конструктору.

API, скорее всего, будет изменен в 0.11, поэтому RenderTargetBitmap можно будет использовать только для рендеринга элементов управления, а другой класс Bitmap может использоваться для рисования в непосредственном режиме.

person kekekeks    schedule 14.07.2020
comment
Спасибо - добавление строки, которая заставляет его компилироваться, но выдает ошибку в DrawText, что FormattedText настроен неправильно (нулевые значения). Я продолжал экспериментировать со статическим растровым изображением, и непрозрачность не подходит для того, что мне нужно - белые области становятся темнее, черные области становятся черными, и мне нужно наоборот - и мозаика не работает, поэтому я буду пока откажитесь от этой идеи и попробуйте еще раз. Достаточно сказать, что было бы неплохо иметь возможность сделать фон с низкой интенсивностью для окна. - person mj2008; 15.07.2020