Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten krótki samouczek przeprowadzi Cię przez przykład, który korzysta z narzędzia Image Scaler w aplikacji .NET MAUI. Aby rozpocząć, upewnij się, że zostały wykonane kroki na stronie Wprowadzenie. Dla programu .NET MAUI.
Wprowadzenie
W tym przykładzie pokazano użycie kilku interfejsów API AI dla Windows, w tym modelu LanguageModel do generowania tekstu i narzędzia ImageScaler do super-rozdzielczości obrazów w celu skalowania i wyostrzenia obrazów. Kliknij jeden z przycisków "Skaluj", aby skalować obraz (lub ponownie wyświetlić oryginalny, nieskalowany obraz) lub wprowadź monit tekstowy i kliknij przycisk "Generuj", aby wygenerować odpowiedź tekstową.
Zmiany z szablonu aplikacji .NET MAUI są podzielone na cztery pliki:
- MauiWindowsAISample.csproj: dodaje wymagane odwołanie do pakietu Windows App SDK dla Windows AI APIs. To odwołanie musi być warunkowe tylko podczas kompilowania dla systemu Windows (zobacz dodatkowe uwagi poniżej, aby uzyskać szczegółowe informacje). Ten plik definiuje również niezbędny TargetFramework dla systemu Windows.
- Platformy/Windows/MainPage.cs: implementuje metody częściowe z udostępnionej klasy MainPage w celu wyświetlania i obsługi funkcji generowania tekstu i skalowania obrazów.
- MainPage.xaml: definiuje kontrolki do pokazywania generowania tekstu i skalowania obrazów.
- MainPage.xaml.cs: definiuje metody częściowe, które implementuje MainPage.cs specyficzne dla systemu Windows.
W drugim pliku wymienionym powyżej znajdziesz następującą funkcję, która demonstruje pewne podstawowe funkcje metody 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());
}
}
}
}
Zbuduj i uruchom przykład
- Sklonuj repozytorium WindowsAppSDK-Samples .
- Przejdź do gałęzi "release/experimental".
- Przejdź do folderu Samples/WindowsAIFoundry/cs-maui .
- Otwórz MauiWindowsAISample.sln w programie Visual Studio 2022.
- Upewnij się, że pasek narzędzi debugowania ma ustawioną wartość "Maszyna z systemem Windows" jako urządzenie docelowe.
- Naciśnij klawisz F5 lub wybierz pozycję "Rozpocznij debugowanie" z menu Debugowanie, aby uruchomić przykład (przykład można również uruchomić bez debugowania, wybierając pozycję "Rozpocznij bez debugowania" z menu Debugowanie lub Ctrl+F5).