Freigeben über


Bildobjekt löschen

Sie können objektlöschen verwenden, um Objekte aus Bildern zu entfernen. Das Modell verwendet sowohl ein Bild als auch eine Graustufenmaske, die angibt, dass das zu entfernende Objekt entfernt wird, den maskierten Bereich aus dem Bild löscht und den gelöschten Bereich durch den Bildhintergrund ersetzt.

Api-Details finden Sie in der API-Referenz für KI-Imageerstellungsfeatures.

Details zur Inhaltsmoderation finden Sie unter Inhaltssicherheit mit generativen AI-APIs.

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>

Bildobjekt-Löschen Beispiel

Das folgende Beispiel zeigt, wie ein Objekt aus einem Bild entfernt wird. Im Beispiel wird davon ausgegangen, dass Sie bereits Über Software-Bitmapobjekte (softwareBitmap) für das Bild und die Maske verfügen. Die Maske muss im Grau8-Format sein, wobei jedes Pixel des zu entfernenden Bereichs auf 255 festgelegt ist und alle anderen Pixel auf 0 festgelegt sind.

  1. Stellen Sie sicher, dass das Image Object Erase-Modell verfügbar ist, indem Sie die GetReadyState-Methode aufrufen und darauf warten, dass die EnsureReadyAsync-Methode erfolgreich zurückgegeben wird.
  2. Nachdem das Image Object Erase-Modell verfügbar ist, erstellen Sie ein ImageObjectRemover-Objekt , um darauf zu verweisen.
  3. Übermitteln Sie schließlich das Bild und die Maske mithilfe der RemoveFromSoftwareBitmap-Methode an das Modell, das das endgültige Ergebnis zurückgibt.
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.AI;
using Microsoft.Windows.Management.Deployment;
using Windows.Graphics.Imaging;

if (ImageObjectRemover.GetReadyState() == AIFeatureReadyState.NotReady) 
{
    var result = await ImageObjectRemover.EnsureReadyAsync();
    if (result.Status != AIFeatureReadyResultState.Success)
    {
        throw result.ExtendedError;
    }
}
ImageObjectRemover imageObjectRemover = await ImageObjectRemover.CreateAsync();
SoftwareBitmap finalImage = imageObjectRemover.RemoveFromSoftwareBitmap(imageBitmap, maskBitmap); // Insert your own imagebitmap and maskbitmap
#include <winrt/Microsoft.Graphics.Imaging.h>
#include <winrt/Microsoft.Windows.AI.Imaging.h>
#include <winrt/Windows.Graphics.Imaging.h>
#include <winrt/Windows.Foundation.h>
using namespace winrt::Microsoft::Graphics::Imaging;
using namespace winrt::Microsoft::Windows::AI.Imaging;
using namespace winrt::Windows::Graphics::Imaging; 
using namespace winrt::Windows::Foundation;
if (ImageObjectRemover::GetReadyState() == AIFeatureReadyState::NotReady)
{
    auto loadResult = ImageObjectRemover::EnsureReadyAsync().get();

    if (loadResult.Status() != AIFeatureReadyResultState::Success)
    {
        throw winrt::hresult_error(loadResult.ExtendedError());
    }
}

ImageObjectRemover imageObjectRemover = ImageObjectRemover::CreateAsync().get();
// Insert your own imagebitmap and maskbitmap
Windows::Graphics::Imaging::SoftwareBitmap buffer = 
    imageObjectRemover.RemoveFromSoftwareBitmap(imageBitmap, maskBitmap);

Siehe auch