Udostępnij za pośrednictwem


Obrazy

Browse sample. Przeglądanie przykładu

Grafika interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI) obejmuje funkcje ładowania, zapisywania, zmieniania rozmiaru i obniżania rozmiaru obrazów. Obsługiwane formaty obrazów są zależne od platformy bazowej.

Obrazy są reprezentowane przez IImage typ, który definiuje następujące właściwości:

  • Width, typu float, który definiuje szerokość obrazu.
  • Height, typu float, który definiuje wysokość obrazu.

Opcjonalny ImageFormat argument można określić podczas ładowania i zapisywania obrazów. Wyliczenie ImageFormat definiuje Pngelementy członkowskie , Jpeg, Gif, Tiffi Bmp . Ten argument jest jednak używany tylko wtedy, gdy format obrazu jest obsługiwany przez podstawową platformę.

Uwaga

Program .NET MAUI zawiera dwa różne IImage interfejsy. Microsoft.Maui.Graphics.IImage służy do wyświetlania, manipulowania obrazami i trwałości podczas wyświetlania grafiki w obiekcie GraphicsView. Microsoft.Maui.IImage to interfejs, który abstrahuje od kontrolki Image .

Ładowanie obrazu

Funkcja ładowania obrazów jest udostępniana przez klasę PlatformImage . Obrazy można ładować ze strumienia FromStream za pomocą metody lub z tablicy bajtów przy użyciu konstruktora PlatformImage .

W poniższym przykładzie pokazano, jak załadować obraz:

using Microsoft.Maui.Graphics.Platform;
using System.Reflection;
using IImage = Microsoft.Maui.Graphics.IImage;

IImage image;
Assembly assembly = GetType().GetTypeInfo().Assembly;
using (Stream stream = assembly.GetManifestResourceStream("GraphicsViewDemos.Resources.Images.dotnet_bot.png"))
{
    image = PlatformImage.FromStream(stream);
}

if (image != null)
{
    canvas.DrawImage(image, 10, 10, image.Width, image.Height);
}

W tym przykładzie obraz jest pobierany z zestawu, ładowany jako strumień i wyświetlany.

Ważne

Ładowanie obrazu osadzonego w zestawie wymaga, aby obraz miał ustawioną akcję kompilacji na wartość Zasób osadzony, a nie MauiImage.

Zmienianie rozmiaru obrazu

Rozmiar obrazów można zmienić przy użyciu Resize metody , która wymaga width i height argumentów typu float, które reprezentują wymiary docelowe obrazu. Metoda Resize akceptuje również dwa opcjonalne argumenty:

  • ResizeMode Argument, który kontroluje sposób zmiany rozmiaru obrazu w celu dopasowania do jego wymiarów docelowych.
  • bool Argument, który określa, czy obraz źródłowy zostanie usunięty po wykonaniu operacji zmiany rozmiaru. Ten argument jest domyślnie ustawiony na falsewartość , co oznacza, że obraz źródłowy nie jest usuwany.

Wyliczenie ResizeMode definiuje następujące elementy członkowskie, które określają, jak zmienić rozmiar obrazu na rozmiar docelowy:

  • Fit, który listboxuje obraz tak, aby pasował do rozmiaru docelowego.
  • Bleed, który przycina obraz tak, aby pasował do rozmiaru docelowego, zachowując współczynnik proporcji.
  • Stretch, który rozciąga obraz tak, aby wypełniał dostępne miejsce. Może to spowodować zmianę współczynnika proporcji obrazu.

W poniższym przykładzie pokazano, jak zmienić rozmiar obrazu:

using Microsoft.Maui.Graphics.Platform;
using System.Reflection;
using IImage = Microsoft.Maui.Graphics.IImage;

IImage image;
Assembly assembly = GetType().GetTypeInfo().Assembly;
using (Stream stream = assembly.GetManifestResourceStream("GraphicsViewDemos.Resources.Images.dotnet_bot.png"))
{
    image = PlatformImage.FromStream(stream);
}

if (image != null)
{
    IImage newImage = image.Resize(100, 60, ResizeMode.Stretch, true);
    canvas.DrawImage(newImage, 10, 10, newImage.Width, newImage.Height);
}

W tym przykładzie obraz jest pobierany z zestawu i ładowany jako strumień. Rozmiar obrazu jest zmieniany przy użyciu Resize metody , a jego argumenty określają nowy rozmiar i że należy go rozciągnąć, aby wypełnić dostępne miejsce. Ponadto obraz źródłowy jest usuwany. Zmieniany rozmiar obrazu jest następnie rysowany przy rzeczywistym rozmiarze (10 10).

Obniżanie rozmiaru obrazu

Obrazy można obniżyć przy użyciu jednego z Downsize przeciążeń. Pierwsze przeciążenie wymaga pojedynczej float wartości reprezentującej maksymalną szerokość lub wysokość obrazu, a jednocześnie obniża rozmiar obrazu przy zachowaniu współczynnika proporcji. Drugie przeciążenie wymaga dwóch float argumentów reprezentujących maksymalną szerokość i maksymalną wysokość obrazu.

Przeciążenia Downsize akceptują również opcjonalny bool argument, który kontroluje, czy obraz źródłowy powinien zostać usunięty po wykonaniu operacji obniżania rozmiaru. Ten argument domyślnie ma wartość false, co oznacza, że obraz źródłowy nie jest usuwany.

W poniższym przykładzie pokazano, jak obniżyć rozmiar obrazu:

using Microsoft.Maui.Graphics.Platform;
using System.Reflection;
using IImage = Microsoft.Maui.Graphics.IImage;

IImage image;
Assembly assembly = GetType().GetTypeInfo().Assembly;
using (Stream stream = assembly.GetManifestResourceStream("GraphicsViewDemos.Resources.Images.dotnet_bot.png"))
{
    image = PlatformImage.FromStream(stream);
}

if (image != null)
{
    IImage newImage = image.Downsize(100, true);
    canvas.DrawImage(newImage, 10, 10, newImage.Width, newImage.Height);
}

W tym przykładzie obraz jest pobierany z zestawu i ładowany jako strumień. Obraz jest downsized przy użyciu Downsize metody , a argument określający, że jego największy wymiar powinien być ustawiony na 100 pikseli. Ponadto obraz źródłowy jest usuwany. Obraz z downsized jest następnie rysowany przy rzeczywistym rozmiarze (10,10).

Zapisywanie obrazu

Obrazy można zapisywać przy użyciu Save metod i SaveAsync . Każda metoda zapisuje element w IImage obiekcie Streami umożliwia określenie opcjonalnych ImageFormat i wartości jakości.

Uwaga

Metody Save i SaveAsync w systemach Android i iOS mogą zapisywać obrazy w formacie JPEG i PNG.

W poniższym przykładzie pokazano, jak zapisać obraz:

using Microsoft.Maui.Graphics.Platform;
using System.Reflection;
using IImage = Microsoft.Maui.Graphics.IImage;

IImage image;
Assembly assembly = GetType().GetTypeInfo().Assembly;
using (Stream stream = assembly.GetManifestResourceStream("GraphicsViewDemos.Resources.Images.dotnet_bot.png"))
{
    image = PlatformImage.FromStream(stream);
}

// Save image to a memory stream
if (image != null)
{
    IImage newImage = image.Downsize(150, true);
    using (MemoryStream memStream = new MemoryStream())
    {
        newImage.Save(memStream);
        // Reset destination stream position to 0 if saving to a file
    }
}

W tym przykładzie obraz jest pobierany z zestawu i ładowany jako strumień. Obraz jest downsized przy użyciu Downsize metody , a argument określający, że jego największy wymiar powinien być ustawiony na 150 pikseli. Ponadto obraz źródłowy jest usuwany. Obraz z downsized jest następnie zapisywany w strumieniu.

Ważne

Metoda Save nie resetuje pozycji strumienia do 0. W związku z tym, jeśli chcesz zapisać strumień w pliku, należy użyć Seek metody , aby zresetować położenie strumienia docelowego do wartości 0 przed skopiowaniem go do pliku.