Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/89: Рейтинг темы: голосов - 89, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 28.09.2014
Сообщений: 103

Изменить изображение в Image

05.06.2017, 12:14. Показов 19180. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста: на форме есть Image с прописанным путем к картинке (Source="Resources/img1.jpg") и кнопка (OpenFileDialog), с помощью которой можно выбрать новое изображение для отображения в Image. Собственно, как можно присвоить новый путь, чтобы при закрытии/открытии программы изменения не сбросились? Были идеи прописать новую директорию в текстовый файл, а уже через него подтягивать в Image Source, но я не знаю как это реализовать (в WPF не бум-бум).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.06.2017, 12:14
Ответы с готовыми решениями:

Асинхронно загрузить изображение в Image
Если загружать большое изображение по принципу Image.Source, то интерфейс будет тупить некоторое время. Есть ли у кого пример асинхронной...

Асинхронно загрузить изображение в Image
Me.Text1 = CDate(Me.Text1) + 1

Как в Image добавить изображение из БД?
Доброго времени суток, в бд хранится изображение, как массив байтов, мб кто то может написать внятный код, как это изображение в Image...

29
0 / 0 / 0
Регистрация: 28.09.2014
Сообщений: 103
07.06.2017, 00:14  [ТС]
Студворк — интернет-сервис помощи студентам
Casper-SC, вот код для эллипса:
XML
1
2
3
4
5
<Ellipse HorizontalAlignment="Left" Height="199" Margin="163,44,0,0" Stroke="Black" VerticalAlignment="Top" Width="199">
            <Ellipse.Fill>
                <ImageBrush x:Name="_image" ImageSource=" " />
            </Ellipse.Fill>
        </Ellipse>
для рамки:

XML
1
2
3
4
5
 <Border BorderBrush="Black" BorderThickness="5" HorizontalAlignment="Left" Height="238" VerticalAlignment="Top" Width="245" Margin="127,33,0,0" RenderTransformOrigin="0.5,0.5" CornerRadius="500">
            <Border.Background>
                <ImageBrush x:Name="_image" ImageSource="" Stretch="UniformToFill" />
            </Border.Background>
        </Border>
Ну и немного подправить код в C#:

C#
1
 _image.ImageSource = new BitmapImage(new Uri(openDialog.FileName));
C#
1
 _image.ImageSource = new BitmapImage(new Uri(config.Settings.AppState.LastPicture));
Однако это работает только для варианта со стандартным Image + Button, с devexpress у меня не получилось.
Еще возникла серьезная проблема: допустим у меня на форме таких картинок будет 5, 10, 20...Добавил значит на форму, запускаю, задаю для каждого Image свой путь, закрываю/открываю и...У всех Image одна и та же картинка (последняя выбранная). Думал, что это связано с переменными, пытался менять, но без толку.
0
0 / 0 / 0
Регистрация: 28.09.2014
Сообщений: 103
07.06.2017, 00:24  [ТС]
Как уже писал, пытался вникать и менять переменные (дошло до того, что менял уже все подряд - не помогло).
Test2.zip
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2017, 01:28
Цитата Сообщение от WalkingTalking Посмотреть сообщение
Еще возникла серьезная проблема: допустим у меня на форме таких картинок будет 5, 10, 20...Добавил значит на форму, запускаю, задаю для каждого Image свой путь, закрываю/открываю и...У всех Image одна и та же картинка (последняя выбранная).
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            var config = Config.Instance;
            if (!string.IsNullOrEmpty(config.Settings.AppState.LastPicture) &&
                File.Exists(config.Settings.AppState.LastPicture))
            {
                _image.Source = new BitmapImage(new Uri(config.Settings.AppState.LastPicture));
            }
 
 
            var config2 = Config.Instance;
            if (!string.IsNullOrEmpty(config2.Settings.AppState.LastPicture) &&
                File.Exists(config2.Settings.AppState.LastPicture))
            {
                _image2.Source = new BitmapImage(new Uri(config2.Settings.AppState.LastPicture));
            }
 
 
 
            var config3 = Config.Instance;
            if (!string.IsNullOrEmpty(config3.Settings.AppState.LastPicture) &&
                File.Exists(config3.Settings.AppState.LastPicture))
            {
                _image3.Source = new BitmapImage(new Uri(config3.Settings.AppState.LastPicture));
 
            }
        }
Ты берёшь и создаёшь 3 разные переменные, которые являются разными ссылками, указывающими на один и тот же экземпляр класса Config, внутри которого используешь один и тот же экземпляр AppState. Тебе в таком случае нужно хранить внутри AppState не один путь к последнему изображению, а массив.

Добавлено через 9 минут
Другими словами:
Представим, что есть коробка, в ней лежит один листок и на нём написано "путь1".
C#
1
var config = Config.Instance;
Ты достал листок из коробки и привязал к нему нитку "config". Положил листок обратно.
-----

C#
1
var config2 = Config.Instance;
Ты достал тот же самый листок из коробки и привязал к нему вторую нитку, назовём её "config2". Положил листок обратно.
-----

C#
1
var config3 = Config.Instance;
Ты достал тот же самый листок из коробки и привязал к нему третью нитку, назовём её "config3". Положил листок обратно.
-----

C#
1
_image.Source = new BitmapImage(new Uri(config.Settings.AppState.LastPicture));
Ты достаёшь листок ниткой "config" и переписываешь слово ("путь1") с листка на первую страницу в блокноте (первая картинка в твоей программе).
-----

C#
1
_image2.Source = new BitmapImage(new Uri(config.Settings.AppState.LastPicture));
Ты достаёшь листок ниткой "config2" и переписываешь слово ("путь1") с листка на вторую страницу в блокноте (вторая картинка в твоей программе).

С третьей ниткой аналогично.



Тебе же нужно создать массив путей к изображениям, что будет в приведённой аналогии 3 разных листка в коробке (3 пути), к каждому листку ты привяжешь свою нитку (ссылка на экземпляр класса) и будешь дёргая за нитку доставать привязанный к конкретно этой нитке листок, а не один и тот же дёргая за разные нитки.

Но вообще, в случае с массивом тебе просто нужно будет бегать в цикле по массиву и так же по массиву Image(ей) на форме. В общем, тут вообще зависит от задачи, можно и декларативно всё на форме раскидать, а можно динамически загружать. Чётко задача тобой не описана, можно только гадать.


Добавлено через 4 минуты
Отредактировал текст. Были ошибки. Перечитай.
0
0 / 0 / 0
Регистрация: 28.09.2014
Сообщений: 103
07.06.2017, 01:35  [ТС]
Casper-SC, аналогию понял. Задача (точнее ее малая часть) состоит в отображении мини-галереи на форме (как в тестовом примере выше, только там вместо 3-х изображений может быть с десяток).
В проекте проблемой оставались только изображения, другие функции уже более-менее наладил, а в массивах я вообще полный 0.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2017, 01:35
Вообще почтиай про ссылочные типы данных и типы значений. Лучше посмотри какой-нибудь видеокурс после чтения, чтобы закрепить и понять лучше, иначе так ты далеко не уедешь.
0
0 / 0 / 0
Регистрация: 28.09.2014
Сообщений: 103
07.06.2017, 01:57  [ТС]
Casper-SC, благодаря Вашим примерам с листками и нитками, я хоть и неправильно, но решил проблему:
C#
1
2
3
 public string LastPicture { get; set; }
 public string LastPicture2 { get; set; }
 public string LastPicture3 { get; set; }
+ правки LastPicture# в обработчиках. Хотя хотелось бы посмотреть и на "правильный" код (массив), по объему код явно меньше выйдет, чем дублирование переменных с добавлением цифры в конце.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2017, 15:30
Цитата Сообщение от WalkingTalking Посмотреть сообщение
Задача (точнее ее малая часть) состоит в отображении мини-галереи на форме
Как работает (должна работать) твоя галерея? От чего зависит сколько там изображений? Расскажи подробно от загрузки приложения до добавления в галерею новых изображений.
0
0 / 0 / 0
Регистрация: 28.09.2014
Сообщений: 103
07.06.2017, 16:25  [ТС]
Casper-SC, проект состоит из форм (к примеру, 5) между которыми можно переключаться посредством кнопок, на этих 5 формах расположены табконтролы с вкладками (их тоже 5, например), на первой вкладке одно изображение, на последней - слайдер из нескольких (как в примере выше, только будет больше 3-х изображений).
Изначально Image'ам прописан путь (из ресурсов). Функция добавления новых Image'ей не нужна, их количество будет неизменно: сколько есть на форме, столько и будет с возможностью изменить содержимое.
Для слайдера хотелось добавить функцию открытия картинки в полном размере, т.к. задумывалось, что этот слайдер будет использоваться для прокрутки превьюшек, при клике на которые в новом окне (неважно, через стандартные средства Windows или через элементы Visual Studio) открывалось бы изображение. Подобное я делал на WinForms, но там был неизменный файл, а потому открытие производилось через Process.Start(Application.StartupPath + "pic.jpg"); при условии, что файл расположен в корне проекта.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2017, 17:54
WalkingTalking, а ты в итоге отказался от DevExpress(овского) ImageEdit? Я вот попробовал его сделать круглым, ни в какую не хочет, где-то спрятана реализация ActualEditorControlTemplate. Как я понял, нужно её менять, чтобы была возможность изменить форму.
0
0 / 0 / 0
Регистрация: 28.09.2014
Сообщений: 103
07.06.2017, 18:03  [ТС]
Casper-SC, на первой вкладке обычный Image (круглый, вписан в рамку) с кнопкой.
В слайдере уже ImageEdit, т.к. там мне круглые изображения ни к чему, удобная всплывающая панель редактирования (не копировать же кнопки для каждого из них).
Теперь думаю, как открыть эти превью в полный размер...может создать форму с Image на все пространство, и при клике на определенную превьюшку открывать поверх эту самую форму, присвоив Image путь (ImageSource)?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.06.2017, 18:03

Как записать изображение в переменную image?
В listView должно программным образом добавляться изображение и два текста. Как в переменную Image вставить изображение? Пытался, но...

Сохранить изображение из компонента Image (WPF)
Есть компонент Image и в него загружен рисунок. Мне надо изображение из Imge сохранить на диск.

Как присвоить элементу Image изображение?
Как присвоить элементу Image изображение? Картинка создается в самой программе. Т.е. хочу сделать что то типо такого: Bitmap bitmap...

Отслеживание полной загрузки изображение в Image WPF
Добрый день. Работаю в WPF. У меня на форме есть несколько изображений. Они подгружаются из интернета по сслыкам следующим образом: ...

Программа для Windows Store: как загрузить изображение в Image
Всем привет. Начал писать программу для windows store на c#. И вопрос. Есть элемент image нужно из кода присвоить ему изображение. В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru