Avalonia. Назначить изображение для Image через нажатие кнопки

Рейтинг: 0Ответов: 0Опубликовано: 27.05.2023

Всем привет. Для одного моего задания в рамках обучения в вузе решил изсользовать Avalonia, но столкнулся с проблемой. Не особо понимаю механизм вывода изображения. Мне нужно сделать это через код после нажатия кнопки. Код кнопки:

private void OnButtonClick_gen_cgd(object sender, RoutedEventArgs e)
{
    var rand = new Random();
    a2 = new Point();
    a2.SetX((float)rand.Next(0, 1000));
    a2.SetY((float)rand.Next(0, 700));
    b2 = new Point();
    b2.SetX((float)rand.Next(0, 1000));
    b2.SetY((float)rand.Next(0, 700));
    c2 = new Point();
    c2.SetX((float)rand.Next(0, 1000));
    c2.SetY((float)rand.Next(0, 700));
    d2 = new Point();
    d2.SetX((float)rand.Next(0, 1000));
    d2.SetY((float)rand.Next(0, 700));

    bezier2 = new Bezier(a2, b2, c2, d2);
    
    bezier2.SetDrawer(new CGDrawer());
    bezier2.Draw();

    Cgd = new Bitmap("CGD.png");
}

xaml:

<Image VerticalAlignment="Center" HorizontalAlignment="Center" Width="700" Height="1000" Source="{Binding Cgd}"></Image>

Перечитал множество источников, но ничего не помогло. Можно резонно заметить, что "плохо читал". Возможно.

На сколько я понял моя переменная Cgd дожна интерпитироваться, как источник для изображения, потому что назначен в Source="{Binding Cgd}" и как я увидел в одном из примеров такая переменная должна быть объявлена непосредственно в коде. Так ли это?

Прошу помощи у тех кто в этом разбирается.

P.S. Вот полный мой код:

using Avalonia.Controls;
using Avalonia;
using Avalonia.Interactivity;
using System.IO;
using Aspose.Drawing;
using System;

namespace lab_2_DP;

public partial class MainWindow : Window
{
    private IPoint a1, b1, c1, d1, a2, b2, c2, d2;
    private Bezier bezier1, bezier2;

    private Bitmap Cgd;
    private Bitmap Cbd;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void OnButtonClick_gen_cbd(object sender, RoutedEventArgs e)
    {
        var rand = new Random();
        a1 = new Point();
        a1.SetX((float)rand.Next(0, 1000));
        a1.SetY((float)rand.Next(0, 700));
        b1 = new Point();
        b1.SetX((float)rand.Next(0, 1000));
        b1.SetY((float)rand.Next(0, 700));
        c1 = new Point();
        c1.SetX((float)rand.Next(0, 1000));
        c1.SetY((float)rand.Next(0, 700));
        d1 = new Point();
        d1.SetX((float)rand.Next(0, 1000));
        d1.SetY((float)rand.Next(0, 700));

        bezier1 = new Bezier(a1, b1, c1, d1);
        
        bezier1.SetDrawer(new CBDrawer());
        bezier1.Draw();

        var fileStream = File.OpenRead("CBD.png");

        Cbd = new Bitmap(fileStream); 
    }

    private void OnButtonClick_save_cbd(object sender, RoutedEventArgs e)
    {
        if (File.Exists(@"CBD.png"))
            bezier1.SaveSVG();
    }
    private void OnButtonClick_gen_cgd(object sender, RoutedEventArgs e)
    {
        var rand = new Random();
        a2 = new Point();
        a2.SetX((float)rand.Next(0, 1000));
        a2.SetY((float)rand.Next(0, 700));
        b2 = new Point();
        b2.SetX((float)rand.Next(0, 1000));
        b2.SetY((float)rand.Next(0, 700));
        c2 = new Point();
        c2.SetX((float)rand.Next(0, 1000));
        c2.SetY((float)rand.Next(0, 700));
        d2 = new Point();
        d2.SetX((float)rand.Next(0, 1000));
        d2.SetY((float)rand.Next(0, 700));

        bezier2 = new Bezier(a2, b2, c2, d2);
        
        bezier2.SetDrawer(new CGDrawer());
        bezier2.Draw();

        Cgd = new Bitmap(@"CGD.png");
    }

    private void OnButtonClick_save_cgd(object sender, RoutedEventArgs e)
    {
        if (File.Exists(@"CGD.png"))
            bezier2.SaveSVG();
    }
}

Ответы

Ответов пока нет.