Loslegen mit der Bildgenerierung

Microsoft Foundry unter Windows unterstützt die Bildgenerierung über Stable Diffusion-basierte APIs, die im Windows App SDK ausgeliefert werden. Sie können diese APIs in Ihren Windows-Apps verwenden, um Bilder und Fotos mithilfe von Eingabeaufforderungen in natürlicher Sprache und generierenden Modellen auf Geräten zu erstellen, zu transformieren und zu verbessern.

Die Bildgenerierung ist für Effizienz und Leistung auf Windows Copilot+ PCs optimiert.

API-Details finden Sie in der Referenz zur Imaging-API.

Mit der AI Dev Gallery können Sie mit Eingabeaufforderungen experimentieren, die Beispielquelle überprüfen und ein funktionierendes Visual Studio Projekt exportieren, bevor Sie die Bildgenerierung in Ihre App integrieren.

Von Bedeutung

Paketmanifestanforderungen: Um Windows AI-Imageerstellungs-APIs zu verwenden, muss Ihre App als MSIX-Paket mit der systemAIModels in Ihrer Package.appxmanifestApp deklarierten Funktion verpackt werden. Stellen Sie außerdem sicher, dass das Attribut Ihres Manifests MaxVersionTested auf eine aktuelle Windows-Version festgelegt ist (z. B. 10.0.26226.0 oder höher), um die Windows AI-Features richtig zu unterstützen. Die Verwendung älterer Werte kann beim Laden des Modells zu Fehlern "Nicht durch App deklariert" führen.

<Dependencies>
  <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26226.0" />
  <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26226.0" />
</Dependencies>

Voraussetzungen

  • Windows-Version: Windows 11, Version 24H2 (Build 26100) oder höher
  • Windows App SDK Version:Version 2.0 Experimental
  • Hardware: Copilot+ PC mit einer NPU (erforderlich)

Unterstützte Hardware

Die Bildgenerierung läuft auf folgender Hardware:

Gerätetechnik Status Details
NPU (Copilot+ PC) ✅ Verfügbar Der einzige unterstützte Hardwarepfad. Weitere Informationen finden Sie im Entwicklerhandbuch Copilot+ PCs.
Grafikprozessor (GPU) ❌ Nicht unterstützt Für GPU nicht verfügbar.
CPU ❌ Nicht unterstützt Nicht verfügbar auf CPU.

Modellverfügbarkeit und Download

Das KI-Bildgenerierungsmodell ist auf einem Copilot+ PC optional – es ist standardmäßig nicht vorinstalliert, da die Installationsgröße mehrere Gigabyte beträgt. Wenn Ihre App zum ersten Mal EnsureReadyAsync aufruft, wird das Modell über Windows Update im Hintergrund heruntergeladen. Endbenutzer können das Modell später auch entfernen, um Speicherplatz freizugeben.

Dieses Verhalten entspricht dem Modelllebenszyklus, der von anderen großen optionalen Windows KI-Modellen verwendet wird. Ihre App muss den Fall "noch nicht installiert" explizit behandeln, anstatt davon auszugehen, dass das Modell vorhanden ist.

Da das AI Image Generation-Modell groß und nicht standardmäßig vorhanden ist, zeigen Sie vor dem Aufrufen EnsureReadyAsyncein Bestätigungsdialogfeld an, damit der Benutzer sowohl den Speicherkosten als auch dem Hintergrunddownload zustimmen kann. Ein typisches Muster:

  1. Rufen Sie GetReadyState auf und verzweigen Sie anhand des zurückgegebenen AIFeatureReadyState:

    • Ready — das Modell wird installiert; Fortfahren.
    • NotReady oder EnsureNeeded – zeigen Sie Ihr Zustimmungsdialogfeld an (siehe unten), und rufen Sie EnsureReadyAsync dann nur an, wenn der Benutzer zustimmt.
    • NotSupportedOnCurrentSystem – das Gerät ist kein Copilot+ PC oder erfüllt die Anforderungen in Supported Hardware nicht. Bieten Sie eine Fallbackerfahrung, und stellen Sie ggf. die Hardwareanforderungen auf, damit der Benutzer eine fundierte Upgradeentscheidung treffen kann.
  2. Erläutern Sie im Zustimmungsdialogfeld Folgendes:

    • Ein optionales Modell zur Bildgenerierung wird heruntergeladen (mehrere GB Speicher).
    • Der Download erfolgt im Hintergrund über Windows Update.
    • Der Benutzer kann den Downloadfortschritt bei Settings>Windows Update überwachen.
    • Der Benutzer kann das Modell später unter "Settings>System>AI Components " entfernen, wenn es nicht mehr gewünscht wird.

    Tipp

    In benutzerdefinierten Zeichenfolgen (Dialogtext, Statusmeldungen) verweisen Sie auf das Modell als "Modell zur Bildgenerierung" oder "optionales KI-Modell" anstelle von "SDXL" oder "Stable Diffusion". Die meisten Endbenutzer sind nicht mit den zugrunde liegenden Modellnamen vertraut, und generische Begriffe kommunizieren eindeutiger.

  3. Während EnsureReadyAsync ausgeführt wird, zeigen Sie in Ihrer App eine Fortschrittsanzeige an. Siehe Get started with Windows AI APIs für das Lade-UI-Muster.

Nach der Installation des Modells

Das Modell bleibt auf dem Gerät, bis der Benutzer es entfernt. Benutzer verwalten installierte Modelle – einschließlich des AI Image Generation-Modells – unter "Settings>System>AI Components". Wenn der Benutzer das Modell später entfernt, gibt der nächste Aufruf Ihrer App an GetReadyStateNotReady oder EnsureNeeded zurück und der Flow für Zustimmung und Download sollte wiederholt werden.

Wählen Sie einen Bildgenerierungsworkflow aus

Verwenden Sie Bildgenerierung, um Prompts in visuelle Inhalte umzuwandeln. Zu den unterstützten Workflows gehören:

  • Text-zu-Bild

    Generieren Sie Bilder aus beschreibenden Textaufforderungen. Nützlich für Illustrationen, Entwurf, angepasste Hintergründe und konzeptionelle Visualisierung.

  • Bild-zu-Bild

    Transformieren Sie ein vorhandenes Bild basierend auf textbezogenen Anleitungen, während die Struktur beibehalten wird. Hilfreich beim Styling, bei der Gestaltung und bei anderen Variationsmöglichkeiten.

  • Magische Füllung

    Füllen Sie maskierte Bereiche mit modellgenerierten Inhalten aus. Verwenden Sie diesen Workflow, um Objekte zu entfernen, Bereiche auszubessern oder mithilfe von Textanweisungen gezielte Bearbeitungen vorzunehmen.

  • Malbuchstil

    Konvertieren Sie Bilder in vereinfachte Gliederungen, die Sie für ein Farbbuch oder eine ähnliche Bildungserfahrung verwenden können.

  • Neu entwerfen

    Wenden Sie künstlerische oder visuelle Stile auf vorhandene Bilder an, während Sie die Struktur beibehalten. Nützlich für kreative Filter, künstlerische Effekte oder Themen-Transformationen.

Verwenden Sie die Bildgenerierungs-APIs

Führen Sie bei Verwendung der Bildgenerierungs-APIs die folgenden grundlegenden Schritte aus.

  1. Stellen Sie sicher, dass das Modell mit EnsureReadyAsync bereit ist.
  2. Erstellen Sie eine ImageGenerator-Instanz .
  3. Wählen Sie den entsprechenden Generierungsworkflow (Textaufforderung, Bildeingabe oder Maske) aus.
  4. Rufen Sie die entsprechende Generationsmethode auf.
  5. Empfangen Sie die Ausgabe als ImageBuffer zum Anzeigen, Bearbeiten oder Speichern.

Generieren eines Bilds aus einer Textaufforderung (Text-zu-Bild)

In diesem Beispiel wird gezeigt, wie Sie ein Bild aus einer Textaufforderung generieren. "Ein schöner Sonnenuntergang über einem Bergsee".

using Microsoft.Windows.AI.Imaging;
using Microsoft.Graphics.Imaging;

public async Task GenerateImageFromText()
{
    // Check if models are ready
    var readyState = ImageGenerator.GetReadyState();
    if (readyState != AIFeatureReadyState.Ready)
    {
        // Download models if needed
        var result = await ImageGenerator.EnsureReadyAsync();
        if (result.Status != AIFeatureReadyResultState.Success)
        {
            Console.WriteLine("Failed to prepare models");
            return;
        }
    }

    // Create ImageGenerator instance
    using var generator = await ImageGenerator.CreateAsync();
    
    // Configure generation options
    var options = new ImageGenerationOptions
    {
        MaxInferenceSteps = 6,
        Creativity = 0.8,
        Seed = 42
    };

    // Generate image
    var result = generator.GenerateImageFromTextPrompt("A beautiful sunset over a mountain lake", options);
    
    if (result.Status == ImageGeneratorResultStatus.Success)
    {
        var imageBuffer = result.Image;
        // Use the generated image (save to file, display, etc.)
        await SaveImageBufferAsync(imageBuffer, "generated_image.png");
    }
    else
    {
        Console.WriteLine($"Image generation failed: {result.Status}");
    }
}

Transformation eines Bildstils (Bild-zu-Bild)

In diesem Beispiel wird gezeigt, wie ein Foto basierend auf einer Textaufforderung in ein Ölbild umgewandelt wird. Insbesondere "Ölmalstil, dicke Pinselstriche, künstlerisch".

public async Task RestyleImage()
{
    using var generator = await ImageGenerator.CreateAsync();
    
    // Load input image
    var inputImage = await LoadImageBufferAsync("photo.jpg");
    
    var options = new ImageGenerationOptions();
    var styleOptions = new ImageFromImageGenerationOptions
    {
        Style = ImageFromImageGenerationStyle.Restyle,
        ColorPreservation = 0.7f
    };

    var result = generator.GenerateImageFromImageBuffer(
        inputImage, 
        "oil painting style, thick brush strokes, artistic", 
        options, 
        styleOptions);
    
    if (result.Status == ImageGeneratorResultStatus.Success)
    {
        await SaveImageBufferAsync(result.Image, "restyled_image.png");
    }
}

Transformieren eines Bildformats (Bild-zu-Bild-Komplex)

In diesem Beispiel wird gezeigt, wie ein Foto basierend auf einer Textaufforderung in ein Ölbild umgewandelt wird. Insbesondere "ein Ölgemälde, dicke Pinselstriche, reichhaltige Farbpalette, traditionelle Leinwand-Textur, realistische Beleuchtung, klassischer Kunststil, schichtige Farbe, hochdetailliert, dramatischer Kontrast, Impasto, strukturierte Leinwand".

using Microsoft.Windows.AI.Imaging;

public async Task CreateImageFromPrompt()
{
    using ImageGenerator model = await ImageGenerator.CreateAsync();

    // Using default values
    var options = new ImageGenerationOptions();

    // Set ImageFromImageGenerationOptions fields
    var imageFromImageOptions = new ImageFromImageGenerationOptions();
    imageFromImageOptions.Style = ImageFromImageGenerationStyle.Restyle;
    imageFromImageOptions.ColorPreservation = 0.5f; // range [0.0f, 1.0f]

    // Load an input image buffer
    using var inputImage = await Utils.LoadSampleImageBufferAsync("sdxl_input_horse.png");

    var textPrompt = "An oil painting, thick brush strokes, rich color palette, traditional canvas texture, realistic lighting, classical fine art style, layered paint, high detail, dramatic contrast, impasto, textured canvas";

    var result = model.GenerateImageFromImageBuffer(inputImage, textPrompt, options, imageFromImageOptions);
    if (result.Status == ImageGeneratorResultStatus.Success)
    {
        // Image generated successfully
        var imageBuffer = result.Image;
        // Process the imageBuffer as needed, e.g., save to file or display
    }
    else
    {
        // Handle error cases based on result.Status
        Console.WriteLine($"Image generation failed with status: {result.Status}");
    }
}

Magische Füllung mit Maske

In diesem Beispiel wird gezeigt, wie Sie eine Maske verwenden, um einen Bereich eines Bilds auszufüllen. Insbesondere "ein roter Sportwagen".

public async Task FillMaskedRegion()
{
    using var generator = await ImageGenerator.CreateAsync();
    
    var inputImage = await LoadImageBufferAsync("scene.jpg");
    var maskImage = await LoadImageBufferAsync("mask.png"); // GRAY8 format
    
    var options = new ImageGenerationOptions();
    
    var result = generator.GenerateImageFromImageBufferAndMask(
        inputImage, 
        maskImage, 
        "a red sports car", 
        options);
    
    if (result.Status == ImageGeneratorResultStatus.Success)
    {
        await SaveImageBufferAsync(result.Image, "filled_image.png");
    }
}

Bild im Malbuchstil erstellen

In diesem Beispiel wird gezeigt, wie Sie ein Bild in einem Farbbuchstil generieren. Insbesondere eine "Katze im Raumschiff".

using Microsoft.Windows.AI.Imaging;

public async Task CreateImageFromPrompt()
{
    using ImageGenerator model = await ImageGenerator.CreateAsync();

    // Using default values
    var options = new ImageGenerationOptions();

    // Set ImageFromTextGenerationOptions fields
    var imageFromTextOptions = new ImageFromTextGenerationOptions();
    imageFromTextOptions.Style = ImageFromTextGenerationStyle.ColoringBook;

    var result = model.GenerateImageFromTextPrompt("Cat in spaceship", options, imageFromTextOptions);
    if (result.Status == ImageGeneratorResultStatus.Success)
    {
        // Image generated successfully
        var imageBuffer = result.Image;
        // Process the imageBuffer as needed, e.g., save to file or display
    }
    else
    {
        // Handle error cases based on result.Status
        Console.WriteLine($"Image generation failed with status: {result.Status}");
    }
}

Generieren eines Bilds mit benutzerdefinierten ImageGenerationOptions-Parametern

In diesem Beispiel wird gezeigt, wie Sie ein Bild basierend auf einer Reihe von Inhaltsfiltern und Einschränkungen generieren. Insbesondere ein „Cat in spaceship“ mit einem TextContentFilterSeverity von Niedrig und einem ImageContentFilterSeverity von Minimum.

using Microsoft.Windows.AI.Imaging;
using Microsoft.Windows.AI.ContentSafety;

public async Task CreateImageFromPromptAndCustomOptions()
{
    using ImageGenerator model = await ImageGenerator.CreateAsync();

    // Using default values
    var options = new ImageGenerationOptions();

    // Set custom ImageGenerationOptions fields
    options.MaxInferenceSteps = 6;
    options.Creativity = 0.8;
    options.Seed = 1234;
    ContentFilterOptions contentFilterOptions = new ContentFilterOptions();
    contentFilterOptions.PromptMaxAllowedSeverityLevel = new TextContentFilterSeverity { Hate = SeverityLevel.Low, Sexual = SeverityLevel.Low, Violent = SeverityLevel.Low, SelfHarm = SeverityLevel.Low };
    contentFilterOptions.ImageMaxAllowedSeverityLevel = new ImageContentFilterSeverity { AdultContentLevel = SeverityLevel.Minimum, GoryContentLevel = SeverityLevel.Minimum, RacyContentLevel = SeverityLevel.Minimum, ViolentContentLevel = SeverityLevel.Minimum };
    options.ContentFilterOptions = contentFilterOptions;

    var result = model.GenerateImageFromTextPrompt("Cat in spaceship", options);
    if (result.Status == ImageGeneratorResultStatus.Success)
    {
        // Image generated successfully
        var imageBuffer = result.Image;
        // Process the imageBuffer as needed, e.g., save to file or display
    }
    else
    {
        // Handle error cases based on result.Status
        Console.WriteLine($"Image generation failed with status: {result.Status}");
    }
}

Verantwortungsvolle KI

Befolgen Sie verantwortungsvolle KI-Empfehlungen, einschließlich Transparenz und Benutzervertrauen, wenn Sie diese APIs verwenden, um Bilder in Ihren Windows-Apps zu ändern oder zu generieren. Um Benutzern zu helfen, den Ursprung und die Geschichte von generierten oder geänderten Bildern zu verstehen, stellen Sie Inhaltsanmeldeinformationen bereit, wie in den Standards "Coalition for Content Provenance and Authenticity" (C2PA) angegeben.

Informationen zu bewährten Methoden zum Hinzufügen von Features für die generative Bilderstellung zu Windows-Apps finden Sie unter Verantwortungsvolle Entwicklung generativer KI unter Windows.

Siehe auch