Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Deze korte zelfstudie begeleidt u door een voorbeeld dat gebruikmaakt van Image Scaler in een .NET MAUI-app. Om te beginnen moet u ervoor zorgen dat u de stappen op de pagina Aan de slag hebt voltooid. Voor .NET MAUI.
Introductie
Dit voorbeeld demonstreert het gebruik van sommige Windows AI-API's, waaronder LanguageModel voor het genereren van tekst en ImageScaler voor de superresolutie van afbeeldingen om afbeeldingen te schalen en te verscherpen. Klik op een van de knoppen 'Schalen' om de afbeelding te schalen (of de oorspronkelijke, niet-geschaalde afbeelding opnieuw weer te geven) of voer een tekstprompt in en klik op de knop Genereren om een tekstantwoord te genereren.
De wijzigingen van de sjabloon .NET MAUI App worden verdeeld over vier bestanden:
- MauiWindowsAISample.csproj: voegt de vereiste Windows App SDK-pakketverwijzing toe voor de Windows AI-API's. Deze verwijzing moet alleen worden ingesteld voor Windows (zie aanvullende opmerkingen hieronder voor meer informatie). Dit bestand stelt ook het benodigde TargetFramework voor Windows in.
- Platforms/Windows/MainPage.cs: implementeert gedeeltelijke methoden uit de gedeelde MainPage-klasse om de functionaliteit voor het genereren en schalen van afbeeldingen weer te geven en af te handelen.
- MainPage.xaml: Hiermee definieert u besturingselementen voor het genereren van tekst en het schalen van afbeeldingen.
- MainPage.xaml.cs: definieert gedeeltelijke methoden die worden geïmplementeerd door de Windows-specifieke MainPage.cs.
In het tweede bestand dat hierboven wordt vermeld, vindt u de volgende functie, die enkele basisfunctionaliteit demonstreert voor de methode ImageScaler:
private async void DoScaleImage(double scale)
{
// Load the original image
var resourceManager = new Microsoft.Windows.ApplicationModel.Resources.ResourceManager();
var resource = resourceManager.MainResourceMap.GetValue("ms-resource:///Files/enhance.png");
if (resource.Kind == Microsoft.Windows.ApplicationModel.Resources.ResourceCandidateKind.FilePath)
{
// Load as a SoftwareBitmap
var file = await Windows.Storage.StorageFile.GetFileFromPathAsync(resource.ValueAsString);
var fileStream = await file.OpenStreamForReadAsync();
var decoder = await BitmapDecoder.CreateAsync(fileStream.AsRandomAccessStream());
var softwareBitmap = await decoder.GetSoftwareBitmapAsync();
int origWidth = softwareBitmap.PixelWidth;
int origHeight = softwareBitmap.PixelHeight;
SoftwareBitmap finalImage;
if (scale == 0.0)
{
// just show the original image
finalImage = softwareBitmap;
}
else
{
// Scale the image to be the exact pixel size of the element displaying it
if (ImageScaler.GetReadyState() == AIFeatureReadyState.NotReady)
{
var op = await ImageScaler.EnsureReadyAsync();
if (op.Status != AIFeatureReadyResultState.Success)
{
throw new Exception(op.ExtendedError.Message);
}
}
ImageScaler imageScaler = await ImageScaler.CreateAsync();
double imageScale = scale;
if (imageScale > imageScaler.MaxSupportedScaleFactor)
{
imageScale = imageScaler.MaxSupportedScaleFactor;
}
System.Diagnostics.Debug.WriteLine($"Scaling to {imageScale}x...");
int newHeight = (int)(origHeight * imageScale);
int newWidth = (int)(origWidth * imageScale);
finalImage = imageScaler.ScaleSoftwareBitmap(softwareBitmap, newWidth, newHeight);
}
// Display the scaled image. The if/else here shows two different approaches to do this.
var mauiContext = scaledImage.Handler?.MauiContext;
if (mauiContext != null)
{
// set the SoftwareBitmap as the source of the Image control
var imageToShow = finalImage;
if (imageToShow.BitmapPixelFormat != BitmapPixelFormat.Bgra8 ||
imageToShow.BitmapAlphaMode == BitmapAlphaMode.Straight)
{
// SoftwareBitmapSource only supports Bgra8 and doesn't support Straight alpha mode, so convert
imageToShow = SoftwareBitmap.Convert(imageToShow, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);
}
var softwareBitmapSource = new SoftwareBitmapSource();
_ = softwareBitmapSource.SetBitmapAsync(imageToShow);
var nativeScaledImageView = (Microsoft.UI.Xaml.Controls.Image)scaledImage.ToPlatform(mauiContext);
nativeScaledImageView.Source = softwareBitmapSource;
}
else
{
// An alternative approach is to encode the image so a stream can be handed
// to the Maui ImageSource.
// Note: There's no "using(...)" here, since this stream needs to be kept alive for the image to be displayed
var scaledStream = new InMemoryRandomAccessStream();
{
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, scaledStream);
encoder.SetSoftwareBitmap(finalImage);
await encoder.FlushAsync();
scaledImage.Source = ImageSource.FromStream(() => scaledStream.AsStream());
}
}
}
}
Het voorbeeldproject compileren en uitvoeren
- Kloon de opslagplaats WindowsAppSDK-Samples .
- Schakel over naar de tak "release/experimenteel".
- Navigeer naar de map Samples/WindowsAIFoundry/cs-maui.
- Open MauiWindowsAISample.sln in Visual Studio 2022.
- Zorg ervoor dat op de werkbalk voor foutopsporing 'Windows-computer' is ingesteld als het doelapparaat.
- Druk op F5 of selecteer 'Foutopsporing starten' in het menu Foutopsporing om het voorbeeld uit te voeren (het voorbeeld kan ook worden uitgevoerd zonder foutopsporing door 'Starten zonder foutopsporing' te selecteren in het menu Foutopsporing of Ctrl+F5).