Wpf почему не отображается картинка
Есть сборка, с которой два проекта:
1-й — библиотека, в которой реализован контрол отображающий некоторое изображение.
Изображение было добавлено в ресурсы проекта (оно лежит в папке «Resources»).
Далее это изображение привязал к элементу Image:
Далее во втором проекте простое wpf окно, в которое я загрузил контрол
И проблема здесь заключается в том, что при запуске второго приложения картинка на контроле не отображается, при том, что в самом контроле в редакторе оно отображается.
Re: Не отображаются изображения из wpf UserControl
| От: | vit_as |
| Дата: | 15.02.12 10:07 |
| Оценка: |
Здравствуйте, Sansagol, Вы писали:
попробуйте указать Source в виде pack Uri
"pack://application. /MyAssembly;component/Resources/ExampleImage.bmp"/>
Re[2]: Не отображаются изображения из wpf UserControl
| От: | Sansagol |
| Дата: | 15.02.12 10:24 |
| Оценка: |
ImageBrush
Кисть ImageBrush позволяет заполнить область растровым изображением. Возможна работа с наиболее распространенными типами файлов, включая BMP, PNG, GIF и JPEG. Используемое изображение идентифицируется свойством ImageSource. Например, ниже показана кисть, которая рисует фон для Grid с применением изображения по имени logo.png, включенного в сборку в виде ресурса:

Свойство ImageSource работает таким же образом, как свойство Source элемента Image, а это означает, что его можно также устанавливать с помощью URI, указывающего на ресурс, внешний файл или местоположение в Интернете. Кроме того, можно создать кисть ImageBrush, использующую определенное в XAML-разметке векторное содержимое, за счет указания объекта DrawingImage в свойстве ImageSource.
Этот подход позволяет сократить накладные расходы (избегая наиболее дорогостоящих классов-наследников Shape) и он также применяется, когда с помощью векторного изображения создается повторяющийся шаблон.
Среда WPF учитывает любую информацию о прозрачности, которую находит в графическом изображении. Например, WPF поддерживает прозрачные области в файле GIF, а также прозрачные и полупрозрачные области в файле PNG.
В этом примере кисть ImageBrush применяется для рисования фона ячейки. В результате изображение растягивается для того, чтобы заполнить область. Если размеры Grid больше размеров исходного изображения, в нем могут появиться артефакты измененного размера (вроде общей размытости). Если форма Grid не соответствует пропорциям изображения, последнее будет деформировано, чтобы заполнить отведенную область.
Данным поведением можно управлять с помощью свойства ImageBrush.Stretch, присваивая ему одно из значений, перечисленных здесь. Например, значение Uniform позволяет масштабировать графическое изображение для заполнения контейнера с сохранением его пропорций, a None — рисовать изображение с натуральным размером (в этом случае часть изображения может быть усечена).
Если изображение меньше заполняемой области, то оно выравнивается согласно значениям свойств AlignmentX и AlignmentY. Незаполненная область остается прозрачной. Это происходит в случае применения масштабирования Uniform к заполняемой области, которая имеет другую форму (в этом случае будут получены белые полосы сверху, снизу и по сторонам). Это также имеет место, когда используется None, а область заполнения больше изображения.
С помощью свойства Viewbox можно вырезать небольшую часть изображения, которая интересует. Для этого понадобится указать четыре числа, описывающие прямоугольник, который нужно вырезать из исходного изображения. Первые два идентифицируют верхний левый угол вырезаемого прямоугольника, а оставшиеся два — его высоту и ширину. Единственная ловушка заключается в том, что Viewbox использует относительную координатную систему — подобно градиентным кистям. Эта система назначает левому верхнему углу изображения координаты (0,0), а нижнему правому — (1.1).
Чтобы понять, как работает Viewbox, взгляните на следующую разметку:
Здесь Viewbox начинается в точке (0.4, 0.5), которая находится почти в середине изображения. (Формально координата X равна произведению 0.4 на ширину, a Y — произведению 0.5 на высоту.) Затем прямоугольник простирается в ширину на 20% оставшейся ширины и высоты изображения (прямоугольник имеет размеры 0.2, умноженное на ширину, и 0.2, умноженное на высоту изображения). Вырезанная часть затем растягивается или центрируется, в зависимости от свойств Stretch, AlignmentX и AlignmentY.
Свойство Viewbox иногда полезно при повторном использовании частей одного и того же изображения для создания некоторых эффектов. Однако если заранее известно, что понадобится только часть изображения, очевидно, имеет смысл вырезать его в каком-нибудь графическом редакторе.
Wpf почему не отображается картинка
Элемент Image предназначен для работы с изображениями. Свойство Source позволяет задать путь к изображению, например:
WPF поддерживает различны форматы изображений: .bmp, .png, .gif, .jpg и т.д.
Также элемент позволяет проводить некоторые простейшие транформации с изображениями. Например, с помощью объекта FormatConvertedBitmap и его свойства DestinationFormat можно получить новое изображение:

InkCanvas
InkCanvas представляет собой полотно, на котором можно рисовать. Первоначально оно предназначалось для стилуса, но в WPF есть поддержка также и для мыши для обычных ПК. Его очень просто использовать:
Либо мы можем вложить в InkCanvas какое-нибудь изображение и на нем уже рисовать:

Все рисование в итоге представляется в виде штрихов — элементов класса System.Windows.Ink.Stroke и хранится в коллекции Strokes, определенной в классе InkCanvas.
Режим рисования
InkCanvas имеет несколько режимов, они задаются с помощью свойства EditingMode , значения для которого берутся из перечисления InkCanvasEditingMode. . Эти значения бывают следующими:
- Ink : используется по умолчанию и предполагает рисование стилусом или мышью
- InkAndGesture : рисование с помощью мыши/стилуса, а также с помощью жестов (Up, Down, Tap и др.)
- GestureOnly : рисование только с помощью жестов пользователя
- EraseByStroke : стирание всего штриха стилусом
- EraseByPoint : стирание только части штриха, к которой прикоснулся стилус
- Select : выделение всех штрихов при касании
- None : отсутствие какого-либо действия
Используя эти значения и обрабатывая события InkCanvas, такие как StrokeCollected (штрих нарисован), StrokeErased (штрих стерли) и др., можно управлять набором штрихов и создавать более функциональные приложения на основе InkCanvas.
Загрузите изображение во время выполнения в WPF и C#
В этом примере показано, как загрузить изображение во время выполнения в программе WPF. Как это часто бывает с WPF, это легко, когда вы знаете, что делать. Он выясняет, что делать сложно.
Короче говоря, вам нужно установить свойство Source элемента управления Image для изображения. К сожалению, вы не можете использовать растровое изображение в WPF, поэтому вам нужно использовать BitmapImage. A BitmapImage немного похож на Bitmap, за исключением менее полезного для рисования.
Чтобы создать BitmapImage, вы передаете его конструктору местоположение файла, который вы хотите загрузить, вроде того, как вы создаете Bitmap. Конечно, это WPF, поэтому вы не можете просто передать конструктору фактическое местоположение файла. Вместо этого вам нужно передать его Uri. A Uri представляет собой унифицированный идентификатор ресурса, объект, который может представлять расположение файлов, а также местоположения в Интернете. Таким образом, вы можете загрузить BitmapImage из файла в Интернете, локальной сети или где-то еще.
(В этом и заключается причина, по которой WPF заставляет вас идти на эти длины, поэтому вы можете загрузить изображение из Интернета. Одно из предположений WPF состоит в том, что вы создаете сетевое приложение. , но делает создание настольных приложений намного сложнее. Однако это полезно. Попробуйте установить свойство Source элемента управления Image на http://www.csharphelper.com/ banner.png во время выполнения и посмотреть, что произойдет.)
Итак, это шаги для загрузки изображения. Вам все равно нужно найти изображение. Вы можете просто подключить его к программе, но этот пример позволяет пользователю выбрать файл изображения для загрузки. Для этого используется класс Microsoft.Win32.OpenFileDialog. Он довольно похож на класс OpenFileDialog, используемый настольными приложениями, за исключением того, что он возвращает true или false, чтобы указать, выбрал ли пользователь файл.
Теперь, когда вы знаете шаги, вот код, который программа использует для загрузки изображения во время выполнения.
using Microsoft.Win32; . private void btnBrowse_Click(object sender, RoutedEventArgs e)
Код создает OpenFileDialog, устанавливает его свойства Фильтр и FilterIndex и отображает его. Если пользователь выбирает файл, программа создает Uri для представления местоположения файла, использует его в конструкторе BitmapImage и устанавливает Image свойство управления Source, равное результату BitmapImage.
