Multimédia
Introduction
Les aspects multimédias pris en charge de manière avancée par WPF concernent les documents, d’une part pour l’optimisation de leurs affichages et d’autre part pour leurs impressions. WPF permet également la gestion des flux audio et vidéo ainsi que celle des images Bitmap. Enfin, le présent sous-chapitre se consacrera à tout ce qui concerne les opérations graphiques.
Documents
Le support multimédia est particulièrement efficace en WPF. En premier lieu, cette technologie propose deux supports pour la gestion des documents :
-
Les FlowDocument, pour la consultation sur écran.
-
Les FixedDocument, pour gérer ces documents lors d’une impression.
1. Gestion de FlowDocument
FlowDocument permet une gestion dynamique des documents. Schématiquement, il s’agit d’afficher un document tel qu’il pourrait l’être en technologie web avec le langage HTML : la capacité à s’adapter à l’espace d’affichage tout en permettant des fonctionnalités de grossissement/rétrécissement de la police ainsi qu’une gestion dynamique de la mise en page.
L’ensemble des classes permettant l’affichage et la gestion avancée des documents dérivent en WPF de la classe FrameworkContentElement dont la définition est rappelée ici :
[RuntimeNameProperty("Name")]
[StyleTypedProperty(Property = "FocusVisualStyle",
StyleTargetType = typeof(Control))]
[UsableDuringInitialization(true)]
[XmlLangProperty("Language")]
public class FrameworkContentElement : ContentElement,
IFrameworkInputElement, IInputElement, ISupportInitialize, IQueryAmbient
{
public static readonly DependencyProperty BindingGroupProperty;
public static readonly RoutedEvent ContextMenuClosingEvent;
public static readonly RoutedEvent ContextMenuOpeningEvent;
public static readonly DependencyProperty ContextMenuProperty;
public static readonly DependencyProperty CursorProperty;
public static readonly DependencyProperty DataContextProperty;
public static readonly DependencyProperty
FocusVisualStyleProperty;
public static readonly DependencyProperty ForceCursorProperty;
public static readonly DependencyProperty InputScopeProperty;
public static readonly DependencyProperty LanguageProperty;
public static readonly...
Gestion des aspects audio et vidéo
1. Introduction
WPF fournit une solution intégrée quant à la gestion des aspects son et vidéo par le biais du contrôle MediaElement. Schématiquement, cette classe héritant de FrameworkElement intègre les fonctions du logiciel Windows Media Player. La description de la classe MediaElement est proposée ci-dessous :
[Localizability(LocalizationCategory.NeverLocalize)]
public class MediaElement : FrameworkElement, IUriContext
{
public static readonly DependencyProperty BalanceProperty;
public static readonly RoutedEvent BufferingEndedEvent;
public static readonly RoutedEvent BufferingStartedEvent;
public static readonly DependencyProperty IsMutedProperty;
public static readonly DependencyProperty LoadedBehaviorProperty;
public static readonly RoutedEvent MediaEndedEvent;
public static readonly RoutedEvent MediaFailedEvent;
public static readonly RoutedEvent MediaOpenedEvent;
public static readonly RoutedEvent ScriptCommandEvent;
public static readonly DependencyProperty ScrubbingEnabledProperty;
public static readonly DependencyProperty SourceProperty;
public static readonly DependencyProperty StretchDirectionProperty;
public static readonly DependencyProperty StretchProperty;
public static readonly DependencyProperty UnloadedBehaviorProperty;
public static readonly DependencyProperty VolumeProperty;
public MediaElement();
public double Balance { get; set; }
public double BufferingProgress { get; }
public bool CanPause { get; }
[DesignerSerializationVisibility
(DesignerSerializationVisibility.Hidden)]
public MediaClock Clock { get; set; }
...
Gestion avancée des images
1. Introduction
La gestion des images a été déjà abordée dans cet ouvrage lors de la présentation du contrôle Image. Il s’agit ici de présenter l’ensemble des fonctionnalités avancées proposées par WPF. Pour rappel, les formats suivants sont gérés par WPF : BMP, ICO, JPEG, PNG, TIFF, GIF ainsi que WDP. Il est toutefois possible de gérer d’autres formats d’images en installant le codec correspondant sur la machine cliente de l’application développée.
La classe abstraite fondamentale en WPF en ce qui concerne les images est la classe ImageSource :
[Localizability(LocalizationCategory.None,
Readability = Readability.Unreadable)]
[TypeConverter(typeof(ImageSourceConverter))]
[ValueSerializer(typeof(ImageSourceValueSerializer))]
public abstract class ImageSource : Animatable, IFormattable,
IResource
{
public abstract double Height { get; }
public abstract ImageMetadata Metadata { get; }
public abstract double Width { get; }
protected static double PixelsToDIPs(double dpi,
int pixels);
public ImageSource Clone();
public ImageSource CloneCurrentValue();
public override string ToString();
public string ToString(IFormatProvider provider);
}
Une autre classe abstraite héritant de la précédente est également fondamentale en WPF : il s’agit de BitmapSource :
[Localizability(LocalizationCategory.None, Readability =
Readability.Unreadable)]
public abstract class BitmapSource : ImageSource, IResource
{
[SecurityCritical]
...
Opérations et effets graphiques
1. Introduction
Plusieurs outils sont fournis par WPF pour découper facilement des objets graphiques, pour apposer une opacité, un ombrage, un flou sur une image ou encore pour définir son propre effet graphique personnalisé. Ces effets sont évidemment applicables aux images mais de manière plus générale, à tout objet de type UIElement et donc à ce titre à tout contrôle utilisateur graphique mais également à des vidéos par exemple.
2. Découpe
Une découpe utilise la propriété Clip, qui prend comme valeur une géométrie de découpe. Ainsi, dans l’exemple suivant, on découpe selon un cercle.
<Window x:Class="CH12_EFFETS.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/
markup-compatibility/2006"
xmlns:local="clr-namespace:CH12_EFFETS"
mc:Ignorable="d"
Title="CH12 EFFETS" Height="275" Width="275">
<StackPanel>
<Image Source="/Logo_ENI.png"
Width="250"
HorizontalAlignment="Left"
Margin="5">
<Image.Clip>
<EllipseGeometry Center="125,125"
RadiusX="80"
RadiusY="80"...