Comment partager une image (applications Windows Runtime en C#/VB/C++ et XAML)

Applies to Windows and Windows Phone

Les images et les photos sont probablement les types de contenu que les utilisateurs partagent le plus. Nous allons vous montrer comment partager une image à partir de votre application.

Le code de cette section s’attache à l’utilisation de la méthode SetBitmap pour partager une image bitmap. Souvent, les utilisateurs partagent des images qui sont représentées sous forme de fichiers. C’est pourquoi nous recommandons que votre application prenne également en charge StorageItems, qui est une collection de fichiers. Nous décrivons comment prendre en charge StorageItems dans Comment partager des fichiers.

Ce que vous devez savoir

Technologies

Prérequis

Instructions

Étape 1: Ajout de l’espace de noms DataTransfer

Vous devez ajouter les espaces de noms appropriés à votre application afin de pouvoir créer et traiter les objets associés au partage. Vous devez ajouter au minimum l’espace de noms Windows.ApplicationModel.DataTransfer :

using Windows.ApplicationModel.DataTransfer;
using namespace Windows::ApplicationModel::DataTransfer;

Cet espace de noms comporte tous les éléments nécessaires pour le partage de base. Gardez cependant à l’esprit que, si vous voulez partager un contenu tel que des images ou fichiers, vous devez également ajouter ces espaces de noms. Voici une liste des espaces de noms dont vous pouvez avoir besoin :

Étape 2: Obtenir l’objet DataTransferManager

L’objet DataTransferManager est le point de départ de toute opération de partage.

DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
DataTransferManager^ dataTransferManager = DataTransferManager::GetForCurrentView();

Étape 3: ajouter un gestionnaire d’événements pour l’événement DataRequested

Ajoutez un gestionnaire d’événements DataRequested qui se déclenche quand l’utilisateur souhaite appeler le partage. Dans une application du Windows Store, cela se produit automatiquement quand l’utilisateur appelle l’icône Partager. Si vous développez une application pour Windows Phone, aucune icône Partager n’est intégrée, donc vous devez ajouter un contrôle sur lequel l’utilisateur peut appuyer pour déclencher le gestionnaire.

dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, 
    DataRequestedEventArgs>(this.ShareImageHandler);
auto dataRequestedToken = dataTransferManager->DataRequested += 
    ref new TypedEventHandler<DataTransferManager^, DataRequestedEventArgs^>(
        this, &MainPage:: ShareImageHandler);

Étape 4: Obtenir un objet DataRequest

Lorsqu’un événement DataRequested survient, votre application reçoit un objet DataRequest. Cet objet contient une classe DataPackage que vous pouvez utiliser pour fournir le contenu qu’un utilisateur souhaite partager.

DataRequest request = e.Request;
DataRequest^ request = e->Request;

Étape 5: Définir les propriétés de titre et de description

La propriété title est obligatoire et doit être définie.

// The title is mandatory
request.Data.Properties.Title = "Share Image Example";
request.Data.Properties.Description = "Demonstrates how to share an image.";
// The title is mandatory
request->Data->Properties->Title = "Share Image Example";
request->Data->Properties->Description = "Demonstrates how to share an image.";

Étape 6: Ajouter une miniature au DataPackage

Nous vous recommandons d’associer systématiquement une image miniature à une image partagée.

request.Data.Properties.Thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile);
request->Data->Properties->Thumbnail = RandomAccessStreamReference::CreateFromFile(thumbnailFile);

Pour plus d’informations sur les tailles de fichier recommandées pour les images miniatures, voir la rubrique de référence Thumbnail.

Étape 7: ajouter l’image en tant que bitmap au DataPackage

Pour partager une image, utilisez la méthode SetBitmap. Cette méthode attend une image de type RandomAccessStreamReference. Pour partager plusieurs images, partagez-les plutôt au format StorageItems. Nous décrivons comment prendre en charge StorageItems dans Comment partager des fichiers. Ainsi, vous vous assurez que les utilisateurs auront accès au plus grand choix d’applications pour partager une image.

request.Data.SetBitmap(RandomAccessStreamReference.CreateFromFile(imageFile));
request->Data->SetBitmap(RandomAccessStreamReference::CreateFromFile(imageFile));

Remarques

Si votre application doit utiliser une opération asynchrone pour préparer l’image ou la miniature, vous devrez utiliser le schéma de report. Nous montrons comment procéder dans Comment effectuer des appels asynchrones dans votre gestionnaire DataRequested.

Si votre application met plus de 200 millisecondes à préparer l’image, vous devez utiliser une fonction déléguée pour la partager. La procédure à suivre pour cela est décrite dans la section Comment prendre en charge les opérations Pull.

Exemple

Voici un exemple qui définit une image qu’un utilisateur souhaite partager. Pour obtenir un exemple plus complet, voir l’exemple de notre bibliothèque de code.

private void RegisterForShare()
{
    DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
    dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, 
        DataRequestedEventArgs>(this.ShareImageHandler);
}

private async void ShareImageHandler(DataTransferManager sender, 
    DataRequestedEventArgs e)
{
    DataRequest request = e.Request;
    request.Data.Properties.Title = "Share Image Example";
    request.Data.Properties.Description = "Demonstrates how to share an image.";

    // Because we are making async calls in the DataRequested event handler,
    //  we need to get the deferral first.
    DataRequestDeferral deferral = request.GetDeferral();   

    // Make sure we always call Complete on the deferral.
    try
    {
        StorageFile thumbnailFile = 
            await Package.Current.InstalledLocation.GetFileAsync("Assets\\SmallLogo.png");
        request.Data.Properties.Thumbnail = 
            RandomAccessStreamReference.CreateFromFile(thumbnailFile);
        StorageFile imageFile = 
            await Package.Current.InstalledLocation.GetFileAsync("Assets\\Logo.png");
        request.Data.SetBitmap(RandomAccessStreamReference.CreateFromFile(imageFile));
    }
    finally
    {
        deferral.Complete();
    }
}
void MainPage::RegisterForShare()
{
    DataTransferManager^ dataTransferManager = DataTransferManager::GetForCurrentView();
    auto dataRequestedToken = dataTransferManager->DataRequested += 
        ref new TypedEventHandler<DataTransferManager^, DataRequestedEventArgs^>(
            this, &MainPage::ShareImageHandler);
}

void MainPage::ShareImageHandler(DataTransferManager^ sender, DataRequestedEventArgs^ e)
{
    DataRequest^ request = e->Request;
    request->Data->Properties->Title = "Share Image Example";
    request->Data->Properties->Description = "Demonstrates how to share an image.";

    // Because we are making async calls in the DataRequested event handler,
    // we need to get the deferral first.
    DataRequestDeferral^ deferral = request->GetDeferral(); 

    create_task(Package::Current->InstalledLocation->GetFileAsync("Assets\\SmallLogo.png")).then(
        [this, request](StorageFile^ thumbnailFile)
    {
        request->Data->Properties->Thumbnail = 
            RandomAccessStreamReference::CreateFromFile(thumbnailFile);
        return Package::Current->InstalledLocation->GetFileAsync("Assets\\Logo.png");
    }).then([this, request, deferral](task<StorageFile^> getImageFileTask)
    {
        try
        {
            auto imageFile = getImageFileTask.get();
            request->Data->SetBitmap(RandomAccessStreamReference::CreateFromFile(imageFile));
            deferral->Complete();
        }
        catch (Exception^ ex)
        {
            // Calling FailWithDisplayText() also calls Complete the deferral.
            request->FailWithDisplayText(ex->Message);
        }
    });

Rubriques associées

Exemple de partage de contenu source entre applications

Partage et échange de données

Comment partager des fichiers

Comment partager du contenu HTML

Comment partager un lien

Comment partager du texte

Démarrage rapide : partage de contenu

DataPackage

Windows.ApplicationModel.DataTransfer

Windows.ApplicationModel.DataTransfer.Share

Scénarios de fonctionnalités de l’exemple Reversi : partage de contenu