如何在代码中制作与 Avalonia UI 兼容的位图?
Posted
技术标签:
【中文标题】如何在代码中制作与 Avalonia UI 兼容的位图?【英文标题】:How to make an Avalonia UI compatible bitmap in code? 【发布时间】:2020-11-03 16:12:22 【问题描述】:我希望在我的 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 代码之间的不同之处,但被卡住了。请问我错过了什么? (是的,我还没有完成文本大小的详细信息 - 需要先了解基础知识)。
【问题讨论】:
【参考方案1】:从 0.9 和 0.10 版本开始,您可以将 IDrawingContextImpl
转换为正确的 DrawingContext
,方法是将其传递给构造函数。
API 很可能在 0.11 中更改,因此 RenderTargetBitmap 将仅可用于渲染 控件,而不同的 Bitmap
类可用于即时模式绘图。
【讨论】:
谢谢 - 添加一行以使其编译,但它在 DrawText 中给出错误,即 FormattedText 设置不正确(空值)。我进一步使用了静态位图,但不透明度不能满足我的需要 - 白色区域变暗,黑色区域变黑,我需要相反 - 平铺不起作用,所以我会暂时放弃这个想法,然后在某个时候再试一次。可以说,能够为窗口制作低强度背景会很不错。以上是关于如何在代码中制作与 Avalonia UI 兼容的位图?的主要内容,如果未能解决你的问题,请参考以下文章