C# AvaloniaUI动态显示图片

AvaloniaUI 实现图片读取与显示

在 AvaloniaUI 中,图片的读取与显示可以通过 Image 控件和 Bitmap 类实现。以下是一个完整的示例代码,展示如何从文件路径加载图片并显示在界面上。

创建 AvaloniaUI 项目

确保已安装 AvaloniaUI 模板。如果未安装,可以通过以下命令安装:

bash 复制代码
dotnet new install Avalonia.Templates
dotnet new avalonia.app -n AvaloniaImageDemo
修改主窗口代码

MainWindow.axaml 中定义 Image 控件:

xml 复制代码
<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="AvaloniaUI 图片显示示例">
    <StackPanel>
        <Image x:Name="PreviewImage" Width="300" Height="300"/>
        <Button Content="选择图片" Click="OnLoadImageClick"/>
    </StackPanel>
</Window>
实现图片加载逻辑

MainWindow.axaml.cs 中添加以下代码:

csharp 复制代码
using Avalonia;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Media.Imaging;
using Avalonia.Platform;
using System.IO;
using System.Threading.Tasks;

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private async void OnLoadImageClick(object sender, RoutedEventArgs e)
    {
        // 打开文件选择对话框
        var dialog = new OpenFileDialog();
        dialog.Filters.Add(new FileDialogFilter { Name = "图片文件", Extensions = { "jpg", "png", "bmp" } });
        var result = await dialog.ShowAsync(this);

        if (result != null && result.Length > 0)
        {
            var filePath = result[0];
            await LoadImageAsync(filePath);
        }
    }

    private async Task LoadImageAsync(string filePath)
    {
        // 异步加载图片
        using (var stream = File.OpenRead(filePath))
        {
            var bitmap = new Bitmap(stream);
            PreviewImage.Source = bitmap;
        }
    }
}
从资源加载图片

如果图片嵌入到程序集中(如 Assets 文件夹),可通过以下方式加载:

csharp 复制代码
private void LoadEmbeddedImage()
{
    var assets = AvaloniaLocator.Current.GetService<IAssetLoader>();
    using (var stream = assets.Open(new Uri("avares://AvaloniaImageDemo/Assets/sample.png")))
    {
        var bitmap = new Bitmap(stream);
        PreviewImage.Source = bitmap;
    }
}
注意事项
  • 文件路径需确保应用有访问权限。
  • 图片格式需为 Avalonia 支持的格式(如 PNG、JPEG、BMP)。
  • 异步加载大图片时建议使用 await 避免阻塞 UI 线程。

以上代码实现了从文件系统选择图片并显示的功能,同时提供了从嵌入式资源加载的示例。

相关推荐
专注仿真3 小时前
CMO模型文档-活动单元基类
c#·模型·cmo·活动单元基类
小灰灰搞电子3 小时前
Rust Once 、OnceLock、LazyLock 一次性初始化详解
开发语言·后端·rust
hqyjzsb4 小时前
规划工商管理大学成长:搭建四层能力体系,重视高阶的 AI 能力建设
开发语言·人工智能·python·microsoft·职场和发展·数据挖掘·业界资讯
for_ever_love__4 小时前
爬虫项目: 获取高分电影的数据总结
开发语言·python·学习
weixin_307779134 小时前
C++代码实现MATLAB中的ode23t函数功能
开发语言·c++·算法·matlab
君顾14 小时前
24小时自助健身房系统开发实战与完整指南
java·开发语言·健身房
syagain_zsx5 小时前
算法基础篇 · 02 高精度(C++ 题解)
开发语言·c++·学习·高精度
白远山5 小时前
无人自助健身平台搭建:从架构设计到设备联动的完整实战
java·开发语言·架构·需求分析
君顾15 小时前
本地电竞服务交易系统架构设计与实战:从同城服务撮合到订单履约
java·开发语言·电竞
我是苏苏6 小时前
Agent 开发实战 :C#实现语义检索!向量数据库Qdrant的下载安装及调试步骤
c#·ai编程