Freigeben über


Superauflösung für Bilder

Die BILD-APIs mit superauflösung ermöglichen das Schärfen und Skalieren von Bildern.

Die Skalierung ist auf einen maximalen Faktor von 8x beschränkt, da höhere Skalierungsfaktoren Artefakte und Kompromittierung der Bildgenauigkeit auslösen können. Wenn entweder die endgültige Breite oder Höhe größer als das 8-fache ihres ursprünglichen Werts ist, wird eine Ausnahme ausgelöst.

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>

Beispiel für Bild-Superauflösung

Das folgende Beispiel zeigt, wie Sie die Skalierung (targetWidth, targetHeight) eines vorhandenen Softwarebitmapbilds (softwareBitmap) ändern und die Bildschärfe mithilfe eines ImageScaler Objekts verbessern (um die Schärfe zu verbessern, ohne das Bild zu skalieren, einfach die vorhandene Bildbreite und -höhe angeben).

  1. Stellen Sie sicher, dass das Image Super Resolution-Modell verfügbar ist, indem Sie die GetReadyState-Methode aufrufen und dann darauf warten, dass die EnsureReadyAsync-Methode erfolgreich zurückgegeben wird.

  2. Sobald das Image Super Resolution-Modell verfügbar ist, erstellen Sie ein ImageScaler-Objekt , um darauf zu verweisen.

  3. Rufen Sie eine geschärfete und skalierte Version des vorhandenen Bilds ab, indem Sie das vorhandene Bild und die gewünschte Breite und Höhe mithilfe der ScaleSoftwareBitmap-Methode an das Modell übergeben.

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

if (ImageScaler.GetReadyState() == AIFeatureReadyState.NotReady) 
{
    var result = await ImageScaler.EnsureReadyAsync();
    if (result.Status != AIFeatureReadyResultState.Success)
    {
        throw result.ExtendedError;
    }
}
ImageScaler imageScaler = await ImageScaler.CreateAsync();
SoftwareBitmap finalImage = imageScaler.ScaleSoftwareBitmap(softwareBitmap, targetWidth, targetHeight);
#include <winrt/Microsoft.Graphics.Imaging.h>
#include <winrt/Microsoft.Windows.AI.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Graphics.Imaging.h>

using namespace winrt::Microsoft::Graphics::Imaging;
using namespace winrt::Microsoft::Windows::AI;
using namespace winrt::Windows::Foundation; 
using namespace winrt::Windows::Graphics::Imaging; 

if (ImageScaler::GetReadyState() == AIFeatureReadyState::NotReady)
{
    auto loadResult = ImageScaler::EnsureReadyAsync().get();

    if (loadResult.Status() != AIFeatureReadyResultState::Success)
    {
        throw winrt::hresult_error(loadResult.ExtendedError());
    }
}
int targetWidth = 100;
int targetHeight = 100;
ImageScaler imageScaler = ImageScaler::CreateAsync().get();
Windows::Graphics::Imaging::SoftwareBitmap finalImage = 
    imageScaler.ScaleSoftwareBitmap(softwareBitmap, targetWidth, targetHeight);

Siehe auch