Язык

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 .../>
Наследование
Object Platform::Object IInspectable DependencyObject ImageSource 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

Всегда возвращается null в приложении пакета SDK для приложений windows. Вместо этого используйте DispatcherQueue .

(Унаследовано от DependencyObject)
DispatcherQueue

Возвращает, DispatcherQueue с которым связан этот объект. Представляет DispatcherQueue собой объект, который может получить доступ к DependencyObject потоку пользовательского интерфейса, даже если код инициируется потоком, отличным от пользовательского интерфейса.

(Унаследовано от DependencyObject)
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

Происходит при скачивании и декодировании источника изображения без сбоя. Это событие можно использовать для определения размера изображения перед отрисовкой.

Применяется к

См. также раздел