BitmapImage Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет практический тип источника объекта для свойств Image.Source и ImageBrush.ImageSource . BitmapImage можно определить с помощью универсального идентификатора ресурса (URI), ссылающегося на исходный файл изображения, или путем вызова SetSourceAsync и предоставления потока.
public ref class BitmapImage sealed : BitmapSource
/// [Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.Activatable(Microsoft.UI.Xaml.Media.Imaging.IBitmapImageFactory, 65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class BitmapImage final : BitmapSource
[Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.Activatable(typeof(Microsoft.UI.Xaml.Media.Imaging.IBitmapImageFactory), 65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class BitmapImage : BitmapSource
Public NotInheritable Class BitmapImage
Inherits BitmapSource
<BitmapImage .../>
- Наследование
- Атрибуты
Примеры
Ниже приведен пример использования объекта BitmapImage для задания Image.Source в C#. В этом примере объект Image был создан в XAML, но не имеет источника или других значений свойств; Вместо этого эти значения предоставляются во время выполнения при загрузке образа из XAML.
<Image Loaded="Image_Loaded"/>
void Image_Loaded(object sender, RoutedEventArgs e)
{
Image img = sender as Image;
BitmapImage bitmapImage = new BitmapImage();
img.Width = bitmapImage.DecodePixelWidth = 80;
// Natural px width of image source.
// You don't need to set Height; the system maintains aspect ratio, and calculates the other
// dimension, as long as one dimension measurement is provided.
bitmapImage.UriSource = new Uri(img.BaseUri,"Assets/StoreLogo.png");
img.Source = bitmapImage;
}
Комментарии
BitmapImage можно получить из следующих форматов файлов изображений:
- Совместная группа экспертов по фотографии (JPEG)
- Переносимая сетевая графика (PNG)
- точечный рисунок (BMP)
- Формат обмена графикой (GIF)
- Формат файла изображений с тегами (TIFF)
- JPEG XR
- значки (ICO)
Если источник изображения является потоком, этот поток, как ожидается, содержит файл изображения в одном из этих форматов.
Класс BitmapImage представляет абстракции, поэтому источник изображения можно задать асинхронно, но по-прежнему ссылаться на разметку XAML как значение свойства или в коде в качестве объекта, который не использует ожидающий синтаксис. При создании объекта BitmapImage в коде он изначально не имеет допустимого источника. Затем необходимо задать источник с помощью одного из следующих методов:
- Используйте конструктор BitmapImage(URI), а не конструктор по умолчанию. Хотя это конструктор, который вы можете подумать об этом как о неявном асинхронном поведении: BitmapImage не будет готов к использованию, пока не вызовет событие ImageOpened , указывающее на успешную асинхронную операцию исходного набора.
- Задайте свойство UriSource . Как и при использовании конструктора URI , это действие неявно асинхронно, и BitmapImage не будет готов к использованию, пока не вызовет событие ImageOpened .
- Используйте SetSourceAsync. Этот метод явно асинхронен. Свойства, в которых можно использовать BitmapImage, такие как Image.Source, предназначены для этого асинхронного поведения и не будут вызывать исключения, если они заданы с использованием BitmapImage, который еще не имеет полного источника. Вместо обработки исключений следует обрабатывать события ImageOpened или ImageFailed непосредственно в BitmapImage или в элементе управления, использующем источник (если эти события доступны в классе элемента управления).
ImageFailed и ImageOpened являются взаимоисключающими. Одно событие или другое всегда возникает, когда объект BitmapImage имеет свой исходный набор или сброс значения.
BitmapImage и кодировка
Базовая поддержка кодека файлов изображений предоставляется API Windows компонентом образов (WIC) в Windows. Дополнительные сведения о конкретных форматах изображений, как описано для кодеков, см. в кодеках Native WIC. Дополнительные сведения о форматах и использовании универсального идентификатора ресурса (URI) для доступа к исходным файлам изображений, поступающим из ресурсов приложения, см. в статье Image and ImageBrush.
API для изображения, BitmapImage и BitmapSource не включают в себя какие-либо выделенные методы для кодирования и декодирования форматов мультимедиа. Все операции кодирования и декодирования являются встроенными, и в большинстве случаев будут отображаться аспекты кодирования или декодирования в составе данных о событиях загрузки. Если вы хотите выполнить какую-либо специальную работу с кодированием изображений или декодированием, которое может использоваться, если приложение выполняет преобразование изображений или манипуляции, следует использовать API, доступный в Windows. Пространство имен Graphics.Imaging. Эти API также поддерживаются API Windows компонента визуализации (WIC) в Windows.
Анимированные изображения
Начиная с Windows 10 версии 1607 элемент XAML Image поддерживает анимированные ИЗОБРАЖЕНИЯ GIF. При использовании BitmapImage в качестве источника изображения можно получить доступ к API BitmapImage для управления воспроизведением анимированного GIF-изображения.
- Используйте свойство AutoPlay , которое по умолчанию имеет значение true, чтобы указать, воспроизводится ли анимированный растровый рисунок сразу после загрузки.
- Используйте свойство IsAnimatedBitmap , чтобы проверить, анимирована ли растровая карта.
- Используйте свойство IsPlaying вместе с методами Воспроизведения и остановки для управления воспроизведением анимированного растрового изображения.
Note
Для большинства приложений рекомендуется задать для автозапусказначение false , если UISettings.AnimationsEnabled имеет значение false, чтобы поддерживать потребности пользователей в специальных возможностях. Не делайте этого, если содержимое анимированного GIF важно для удобства использования приложения.
Если приложение выполняется в выпусках Windows 10 до версии 1607, необходимо использовать класс ApiInformation, чтобы проверить наличие этих участников перед их использованием. Дополнительные сведения см. в статье "Адаптивный код версии": использование новых API при сохранении совместимости с предыдущими версиями.
В этом примере показано, как использовать анимированный GIF-файл. Кнопка позволяет пользователю запускать или останавливать анимацию. В этом примере используется адаптивный код версии, поэтому он может выполняться во всех версиях Windows 10. В версиях до версии 1607 отображается первый кадр GIF, но он не анимирован.
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Image Loaded="Image_Loaded">
<Image.Source>
<BitmapImage x:Name="imageSource"
UriSource="Assets/example.gif"
ImageOpened="imageSource_ImageOpened"/>
</Image.Source>
</Image>
<AppBarButton x:Name="playButton"
Icon="Play"
Visibility="Collapsed"
Click="playButton_Click"/>
</Grid>
// Set the AutoPlay property.
private void Image_Loaded(object sender, RoutedEventArgs e)
{
if (ApiInformation.IsPropertyPresent("Windows.UI.Xaml.Media.Imaging.BitmapImage", "AutoPlay") == true)
{
imageSource.AutoPlay = false;
}
}
// Show the play/stop button if the image is animated.
private void imageSource_ImageOpened(object sender, RoutedEventArgs e)
{
var bitmapImage = (BitmapImage)sender;
// At this point you can query whether the image is animated or not.
if (ApiInformation.IsPropertyPresent("Windows.UI.Xaml.Media.Imaging.BitmapImage", "IsAnimatedBitmap")
&& bitmapImage.IsAnimatedBitmap == true)
{
// Enable the play button
playButton.Visibility = Visibility.Visible;
}
}
// Play or stop the animated bitmap.
void playButton_Click(object sender, RoutedEventArgs e)
{
if (ApiInformation.IsPropertyPresent("Windows.UI.Xaml.Media.Imaging.BitmapImage", "IsPlaying"))
{
// You can call the Play and Stop methods safely because is the IsPlaying property is
// present, these methods are also present.
if (imageSource.IsPlaying == true)
{
playButton.Icon = new SymbolIcon(Symbol.Play);
imageSource.Stop();
}
else
{
playButton.Icon = new SymbolIcon(Symbol.Stop);
imageSource.Play();
}
}
}
Дополнительные примеры см. в примере воспроизведения анимированного GIF-файла.
Конструкторы
| Имя | Описание |
|---|---|
| BitmapImage() |
Инициализирует новый экземпляр класса BitmapImage . |
| BitmapImage(Uri) |
Инициализирует новый экземпляр класса BitmapImage с помощью предоставленного универсального идентификатора ресурса (URI). |
Свойства
| Имя | Описание |
|---|---|
| AutoPlay |
Возвращает или задает значение, указывающее, должен ли анимационный образ воспроизводиться сразу после загрузки. |
| AutoPlayProperty |
Определяет свойство зависимостей Автозапуска . |
| CreateOptions |
Возвращает или задает bitmapCreateOptions для BitmapImage. |
| CreateOptionsProperty |
Определяет свойство зависимостей CreateOptions . |
| DecodePixelHeight |
Возвращает или задает высоту, используемую для операций декодирования изображений. |
| DecodePixelHeightProperty |
Определяет свойство зависимостей DecodePixelHeight . |
| DecodePixelType |
Возвращает или задает значение, определяющее способ интерпретации значений DecodePixelWidth и DecodePixelHeight для операций декодирования. |
| DecodePixelTypeProperty |
Определяет свойство зависимостей DecodePixelType . |
| DecodePixelWidth |
Возвращает или задает ширину, используемую для операций декодирования изображений. |
| DecodePixelWidthProperty |
Определяет свойство зависимостей DecodePixelWidth . |
| Dispatcher |
Всегда возвращается |
| DispatcherQueue |
Возвращает, |
| IsAnimatedBitmap |
Возвращает значение, указывающее, является ли изображение анимированным. |
| IsAnimatedBitmapProperty |
Определяет свойство зависимостей IsAnimatedBitmap . |
| IsPlaying |
Возвращает значение, указывающее, воспроизводится ли анимированный образ. |
| IsPlayingProperty |
Определяет свойство зависимостей IsPlaying . |
| PixelHeight |
Возвращает высоту растрового изображения в пикселях. (Унаследовано от BitmapSource) |
| PixelWidth |
Возвращает ширину растрового изображения в пикселях. (Унаследовано от BitmapSource) |
| UriSource |
Возвращает или задает универсальный идентификатор ресурса (URI) исходного файла графики, создающего этот BitmapImage. |
| UriSourceProperty |
Определяет свойство зависимости UriSource . |
Методы
| Имя | Описание |
|---|---|
| ClearValue(DependencyProperty) |
Очищает локальное значение свойства зависимостей. (Унаследовано от DependencyObject) |
| GetAnimationBaseValue(DependencyProperty) |
Возвращает любое базовое значение, установленное для свойства зависимостей, которое будет применяться в случаях, когда анимация не активна. (Унаследовано от DependencyObject) |
| GetValue(DependencyProperty) |
Возвращает текущее эффективное значение свойства зависимостей из DependencyObject. (Унаследовано от DependencyObject) |
| Play() |
Запускает анимацию анимированного изображения. |
| ReadLocalValue(DependencyProperty) |
Возвращает локальное значение свойства зависимостей, если задано локальное значение. (Унаследовано от DependencyObject) |
| RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Регистрирует функцию уведомлений для прослушивания изменений в определенном экземпляре DependencyProperty в этом экземпляре DependencyObject . (Унаследовано от DependencyObject) |
| SetSource(IRandomAccessStream) |
Задает исходное изображение для BitmapSource путем доступа к потоку. Вместо этого большинство вызывающих абонентов должны использовать SetSourceAsync . (Унаследовано от BitmapSource) |
| SetSourceAsync(IRandomAccessStream) |
Задает исходный образ для BitmapSource путем доступа к потоку и асинхронной обработки результата. (Унаследовано от BitmapSource) |
| SetValue(DependencyProperty, Object) |
Задает локальное значение свойства зависимостей в DependencyObject. (Унаследовано от DependencyObject) |
| Stop() |
Завершает анимацию анимированного изображения. |
| UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
Отменяет уведомление об изменении, которое ранее было зарегистрировано путем вызова RegisterPropertyChangedCallback. (Унаследовано от DependencyObject) |
События
| Имя | Описание |
|---|---|
| DownloadProgress |
Возникает при значительном изменении хода загрузки содержимого BitmapImage . |
| ImageFailed |
Возникает при возникновении ошибки, связанной с извлечением изображения или форматированием. |
| ImageOpened |
Происходит при скачивании и декодировании источника изображения без сбоя. Это событие можно использовать для определения размера изображения перед отрисовкой. |