Nano Hash - криптовалюты, майнинг, программирование

Использовать выбранное пользователем изображение в качестве фона холста

Удалил свой старый вопрос, чтобы задать более конкретный. Я использую код с http://www.c-sharpcorner.com/uploadfile/mahesh/image-viewer-in-wpf/ в качестве основы. Позволяет пользователю найти файл изображения для открытия и отображения. Я хочу отобразить изображение, а затем позволить пользователю делать на нем отметки. Я решил, что хочу использовать холст для этого. Прямо сейчас я не могу понять, как получить выбранное пользователем изображение в качестве фона. Я получаю сообщение об ошибке: «System.Windows.Shapes.Path не содержит определения для« фона », и не может быть найден метод расширения« фон », принимающий первый аргумент типа« System.Windows.Shapes.Path ». ..." из строки, в которой говорится "canvas1.Background = кисть;". Я искал способы установить фон холста, некоторые из которых включали просто использование кода xaml, но затем я получаю другие ошибки.

XAML:

<Window x:Class="CanvasStuff.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Main Window" Height="409" Width="574">
    <Grid >
        <Label Content="Image" Height="32" HorizontalAlignment="Left" Margin="11,10,0,0"
               Name="selectedFileName" VerticalAlignment="Top" Width="393"
               Background="LightGray" BorderBrush="Gray" BorderThickness="1"/>
        <Button Content="Browse File" Height="34" HorizontalAlignment="Left" Margin="410,8,0,0"
                Name="BrowseButton" VerticalAlignment="Top" Width="119"
                Foreground="Maroon" FontSize="16" FontFamily="Georgia" Click="BrowseButton_Click" />
        <Canvas>
            <Path Canvas.Left="61" Canvas.Top="28" Width="133" Height="98" Fill="Blue" 
            Stretch="Fill" Data="M61,125 L193,28" Name="canvas1"/>
        </Canvas>
    </Grid>
</Window>

Код позади:

namespace CanvasStuff
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void BrowseButton_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.InitialDirectory = "c:\\";
            dlg.Filter = "Image files (*.jpg)|*.jpg|All Files (*.*)|*.*";
            dlg.RestoreDirectory = true;

            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string selectedFileName = dlg.FileName;
                ImageBrush brush = new ImageBrush();
                brush.ImageSource = new BitmapImage(new Uri(selectedFileName, UriKind.Relative));
                canvas1.Background = brush; #error here
                BitmapImage bitmap = new BitmapImage();
            }

        }
    }
}
19.11.2014

  • вместо этого используйте UriKind.Absolute, выбранный файл, конечно, должен находиться в некотором абсолютном пути. 19.11.2014
  • Я изменил его, но я получаю ту же ошибку. Я не думаю, что правильно использую Name=canvas1 в своем .xaml. Когда я возился с этим, ошибка .background исчезает, но я получаю, что canvas1 не используется в текущей ошибке контекста. 19.11.2014
  • вы устанавливаете Name для внутреннего Path, а не Canvas. Почему это может быть для вас такой сложной проблемой именования? 19.11.2014
  • В любом случае, мой предыдущий комментарий - это еще одна ваша проблема, не верите? просто сохраните свой код и запустите его после того, как вы правильно назовете свой Canvas. 19.11.2014
  • Да, я только что заметил это, посмотрев на пример bonyjoe ниже. Был там этот путь из предыдущего примера и забыл избавиться от него. Спасибо! 19.11.2014

Ответы:


1

Элемент «canvas1» — это путь, поэтому он имеет свойство заливки, а не свойство фона, поэтому вы можете заменить canvas1.Background на canvas1.Fill. Но это не даст вам фона, так как этот путь имеет небольшой размер. Вы действительно хотите, чтобы у вашего окна был фон, который вы можете сделать, используя охватывающую рамку.

<Window x:Class="CanvasStuff.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Main Window" Height="409" Width="574">
<Border x:Name="bgBorder" BorderThickness="0">
    <!-- insert your current content here -->
</Border>
</Window>

Тогда просто замените

canvas1.Background = brush;

с участием

bgBorder.Background = brush;
19.11.2014
  • Спасибо! Я понятия не имею, почему у меня там была дорожка. Я думаю, что понял это, глядя на примеры холстов, и просто забыл об этом. Я избавился от него и немного поправил свой .xaml, и теперь он работает. 19.11.2014
  • @pfinferno правда? все еще используете UriKind.Relative? 19.11.2014
  • Я изменил его, как вы сказали, что спасло меня от будущих проблем. Спасибо. 19.11.2014
  • Нет проблем, пожалуйста, отметьте как ответ, если вы нашли это полезным. Также вы можете вообще не указывать UriKind, конструктор Uri(String) предполагает UriKind.Absolute. 19.11.2014

  • 2

    Разобрался благодаря bonyjoe и King King. Моя главная проблема заключалась в том, что я забыл убрать путь (не хочу, чтобы он был там), который я использовал в предыдущем примере. Итак, мой код canvas .xaml теперь выглядит так:

        <Canvas Margin="0,48,0,0" x:Name="canvas1">
        </Canvas>
    

    Это исправило то, что я пытался сделать.

    19.11.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..