首页 > 解决方案 > 如何在代码中制作与 Avalonia UI 兼容的位图?

问题描述

我希望在我的 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 代码之间的不同之处,但被卡住了。请问我错过了什么?(是的,我还没有完成文本大小的细节 - 需要先让基础工作)。

标签: avaloniaui

解决方案


从 0.9 和 0.10 版本开始,您可以通过将其传递给构造函数来转换IDrawingContextImpl为正确的。DrawingContext

API 很可能在 0.11 中发生更改,因此 RenderTargetBitmap 将仅可用于呈现控件,并且可以将不同的Bitmap类用于即时模式绘图。


推荐阅读