PowerShell GUI : Intégrer une image dans l’interface

Bonjour à tous, Ici nous allons voir comment intégrer une image dans une interface GUI avec PowerShell

Prenons une interface Basic, avec:
– une form (forcément sinon on pourrait rien faire)
– une zone image
– une deuxième zone image plus petite

Pour commencer, nous avons besoin d’une image, je l’ai placé dans mon disque D: et je l’ai nommé smile-petit.png

Voici le PowerShell GUI de base que nous allons utilisé

[xml]$xaml = @"
<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Name="Window"
            Title="Intégration image" Height="174.865" Width="328.885">
    <Grid>
        <Image x:Name="image" HorizontalAlignment="Left" Height="99" Margin="10,0,0,0" VerticalAlignment="Top" Width="170"/>
        <Image x:Name="image_petit" HorizontalAlignment="Left" Height="45" Margin="202,71,0,0" VerticalAlignment="Top" Width="56"/>
    </Grid>
</Window>
"@

#*********************************************************
# Permet de lancer le script
# sans devoir passer par Windows PowerShell ISE
#*********************************************************
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')

#*********************************************************
#Changement du XAML et et création de la fenêtre
#*********************************************************
$reader = (New-Object System.Xml.XmlNodeReader $xaml)
$window = [Windows.Markup.XamlReader]::Load($reader)


#*********************************************************
# Affichage de la fenêtre
#*********************************************************
$window.ShowDialog()

Ensuite, il faut lancer la commande suivante en PowerShell pour convertir l’image en 64bits.

[convert]::ToBase64String((get-content 'D:\smile-petit.png' -encoding byte))

On récupère le résultat qu’on met dans une variable

#*********************************************************
#Création de l'image en 64bits
#*********************************************************
# Commande PowerShell a utilisé
# [convert]::ToBase64String((get-content 'D:\smile-petit.png' -encoding byte))
$Logo = "xxxxxx"

Ensuite on va utiliser cette variable pour l’afficher en tant que Icone dans la barre menu

#*********************************************************
# Définition de l'image en tant que icone de barre
#*********************************************************
$bitmap = New-Object System.Windows.Media.Imaging.BitmapImage
$bitmap.BeginInit()
$bitmap.StreamSource = [System.IO.MemoryStream][System.Convert]::FromBase64String($Logo)
$bitmap.EndInit()
$bitmap.Freeze()
$window.Icon = $bitmap

Maintenant on va l’insérer dans les Zones Image de notre GUI

#*********************************************************
#Insertion de l'image dans la Zone Image du XAML
#*********************************************************
$image.source = $bitmap
$imagePetit.source = $bitmap #on remarque que l'image s'adapte en fonction de la zone d'image définie

Voici le résultat de mon code:

Voici le script complet de mon interface: IntegrationImageGUI


Maintenant plus d’excuse pour rendre son interface plus visuelle.