-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* SkiaSharp mega-sample. * Try fix PR build * Try fix PR build * Try fix PR build * PR build debug info * Try fix PR build --------- Co-authored-by: Gerald Versluis <gerald.versluis@microsoft.com>
- Loading branch information
1 parent
ac29ad7
commit 52a3a61
Showing
298 changed files
with
16,722 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
--- | ||
name: .NET MAUI - SkiaSharp | ||
description: "This sample demonstrates the use of SkiaSharp in a .NET MAUI app." | ||
page_type: sample | ||
languages: | ||
- csharp | ||
- xaml | ||
products: | ||
- xamarin | ||
- dotnetmaui | ||
urlFragment: skiasharpmaui-demos | ||
--- | ||
|
||
# .NET MAUI and SkiaSharp | ||
|
||
SkiaSharp is a 2D graphics system for .NET and C# powered by the open-source Skia graphics engine that's used extensively in Google products. You can use SkiaSharp in your .NET Multi-platform App UI (.NET MAUI) apps to draw 2D vector graphics, bitmaps, and text. | ||
|
||
This sample demonstrates the use of SkiaSharp in a .NET MAUI app. | ||
|
||
[!INCLUDE [Install SkiaSharp](../includes/install-skiasharp.md)] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
|
||
Microsoft Visual Studio Solution File, Format Version 12.00 | ||
# Visual Studio Version 17 | ||
VisualStudioVersion = 17.8.34330.188 | ||
MinimumVisualStudioVersion = 10.0.40219.1 | ||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharpDemos", "SkiaSharpDemos\SkiaSharpDemos.csproj", "{63B3F69B-D30F-480D-B914-7390F2D1F52E}" | ||
EndProject | ||
Global | ||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||
Debug|Any CPU = Debug|Any CPU | ||
Release|Any CPU = Release|Any CPU | ||
EndGlobalSection | ||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||
{63B3F69B-D30F-480D-B914-7390F2D1F52E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||
{63B3F69B-D30F-480D-B914-7390F2D1F52E}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||
{63B3F69B-D30F-480D-B914-7390F2D1F52E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU | ||
{63B3F69B-D30F-480D-B914-7390F2D1F52E}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||
{63B3F69B-D30F-480D-B914-7390F2D1F52E}.Release|Any CPU.Build.0 = Release|Any CPU | ||
EndGlobalSection | ||
GlobalSection(SolutionProperties) = preSolution | ||
HideSolutionNode = FALSE | ||
EndGlobalSection | ||
GlobalSection(ExtensibilityGlobals) = postSolution | ||
SolutionGuid = {9E97E4D6-1629-4123-95D7-1B7108AD826A} | ||
EndGlobalSection | ||
EndGlobal |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
<?xml version = "1.0" encoding = "UTF-8" ?> | ||
<Application xmlns="http://schemas.microsoft.com/dotnet/2021/maui" | ||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" | ||
xmlns:local="clr-namespace:SkiaSharpDemos" | ||
x:Class="SkiaSharpDemos.App"> | ||
<Application.Resources> | ||
<ResourceDictionary> | ||
<ResourceDictionary.MergedDictionaries> | ||
<ResourceDictionary Source="Resources/Styles/Colors.xaml" /> | ||
<ResourceDictionary Source="Resources/Styles/Styles.xaml" /> | ||
</ResourceDictionary.MergedDictionaries> | ||
|
||
<Style TargetType="StackLayout"> | ||
<Setter Property="Spacing" Value="6" /> | ||
</Style> | ||
<Style TargetType="Grid"> | ||
<Setter Property="ColumnSpacing" Value="6" /> | ||
<Setter Property="RowSpacing" Value="6" /> | ||
</Style> | ||
<Style TargetType="HorizontalStackLayout"> | ||
<Setter Property="Spacing" Value="6" /> | ||
</Style> | ||
|
||
</ResourceDictionary> | ||
</Application.Resources> | ||
</Application> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
namespace SkiaSharpDemos; | ||
|
||
public partial class App : Application | ||
{ | ||
public App() | ||
{ | ||
InitializeComponent(); | ||
|
||
MainPage = new AppShell(); | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
<?xml version="1.0" encoding="UTF-8" ?> | ||
<Shell | ||
x:Class="SkiaSharpDemos.AppShell" | ||
xmlns="http://schemas.microsoft.com/dotnet/2021/maui" | ||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" | ||
xmlns:local="clr-namespace:SkiaSharpDemos" | ||
Shell.FlyoutBehavior="Disabled" | ||
Title="SkiaSharpDemos"> | ||
|
||
<ShellContent | ||
Title="Home" | ||
ContentTemplate="{DataTemplate local:MainPage}" | ||
Route="MainPage" /> | ||
|
||
</Shell> | ||
|
10 changes: 10 additions & 0 deletions
10
8.0/SkiaSharp/SkiaSharpDemos/SkiaSharpDemos/AppShell.xaml.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
namespace SkiaSharpDemos; | ||
|
||
public partial class AppShell : Shell | ||
{ | ||
public AppShell() | ||
{ | ||
InitializeComponent(); | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
using System.Windows.Input; | ||
|
||
namespace SkiaSharpDemos | ||
{ | ||
public class BasePage : ContentPage | ||
{ | ||
public ICommand NavigateCommand { get; private set; } | ||
|
||
public BasePage() | ||
{ | ||
NavigateCommand = new Command<Type>(async (Type pageType) => | ||
{ | ||
Page page = (Page)Activator.CreateInstance(pageType); | ||
await Navigation.PushAsync(page); | ||
}); | ||
|
||
BindingContext = this; | ||
} | ||
} | ||
} |
128 changes: 128 additions & 0 deletions
128
8.0/SkiaSharp/SkiaSharpDemos/SkiaSharpDemos/Basics/BasicBitmapsPage.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
using System.Reflection; | ||
using SkiaSharp; | ||
using SkiaSharp.Views.Maui; | ||
using SkiaSharp.Views.Maui.Controls; | ||
|
||
namespace SkiaSharpDemos.Basics | ||
{ | ||
public class BasicBitmapsPage : ContentPage | ||
{ | ||
SKCanvasView canvasView; | ||
|
||
HttpClient httpClient = new HttpClient(); | ||
|
||
SKBitmap webBitmap; | ||
SKBitmap resourceBitmap; | ||
SKBitmap libraryBitmap; | ||
|
||
public BasicBitmapsPage() | ||
{ | ||
Title = "Basic Bitmaps"; | ||
|
||
canvasView = new SKCanvasView(); | ||
canvasView.PaintSurface += OnCanvasViewPaintSurface; | ||
Content = canvasView; | ||
|
||
// Load resource bitmap | ||
Assembly assembly = GetType().GetTypeInfo().Assembly; | ||
|
||
using (Stream stream = assembly.GetManifestResourceStream("SkiaSharpDemos.Media.monkey.png")) | ||
{ | ||
resourceBitmap = SKBitmap.Decode(stream); | ||
} | ||
|
||
// Add tap gesture recognizer | ||
TapGestureRecognizer tapRecognizer = new TapGestureRecognizer(); | ||
tapRecognizer.Tapped += async (sender, args) => | ||
{ | ||
// Load bitmap from photo library | ||
FileResult photo = await MediaPicker.Default.PickPhotoAsync(); | ||
if (photo != null) | ||
{ | ||
using (Stream stream = await photo.OpenReadAsync()) | ||
{ | ||
if (stream != null) | ||
{ | ||
libraryBitmap = SKBitmap.Decode(stream); | ||
canvasView.InvalidateSurface(); | ||
} | ||
} | ||
} | ||
}; | ||
canvasView.GestureRecognizers.Add(tapRecognizer); | ||
} | ||
|
||
protected override async void OnAppearing() | ||
{ | ||
base.OnAppearing(); | ||
|
||
// Load web bitmap. | ||
string url = "https://learn.microsoft.com/en-us/dotnet/maui/media/what-is-maui/maui-overview.png"; | ||
|
||
try | ||
{ | ||
using (Stream stream = await httpClient.GetStreamAsync(url)) | ||
using (MemoryStream memStream = new MemoryStream()) | ||
{ | ||
await stream.CopyToAsync(memStream); | ||
memStream.Seek(0, SeekOrigin.Begin); | ||
|
||
webBitmap = SKBitmap.Decode(memStream); | ||
canvasView.InvalidateSurface(); | ||
} | ||
} | ||
catch | ||
{ | ||
} | ||
} | ||
|
||
void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args) | ||
{ | ||
SKImageInfo info = args.Info; | ||
SKSurface surface = args.Surface; | ||
SKCanvas canvas = surface.Canvas; | ||
|
||
canvas.Clear(); | ||
|
||
if (webBitmap != null) | ||
{ | ||
float x = (info.Width - webBitmap.Width) / 2; | ||
float y = (info.Height / 3 - webBitmap.Height) / 2; | ||
canvas.DrawBitmap(webBitmap, x, y); | ||
} | ||
|
||
if (resourceBitmap != null) | ||
{ | ||
canvas.DrawBitmap(resourceBitmap, | ||
new SKRect(0, info.Height / 3, info.Width, 2 * info.Height / 3)); | ||
} | ||
|
||
if (libraryBitmap != null) | ||
{ | ||
float scale = Math.Min((float)info.Width / libraryBitmap.Width, | ||
info.Height / 3f / libraryBitmap.Height); | ||
|
||
float left = (info.Width - scale * libraryBitmap.Width) / 2; | ||
float top = (info.Height / 3 - scale * libraryBitmap.Height) / 2; | ||
float right = left + scale * libraryBitmap.Width; | ||
float bottom = top + scale * libraryBitmap.Height; | ||
SKRect rect = new SKRect(left, top, right, bottom); | ||
rect.Offset(0, 2 * info.Height / 3); | ||
|
||
canvas.DrawBitmap(libraryBitmap, rect); | ||
} | ||
else | ||
{ | ||
using (SKPaint paint = new SKPaint()) | ||
{ | ||
paint.Color = SKColors.Blue; | ||
paint.TextAlign = SKTextAlign.Center; | ||
paint.TextSize = 48; | ||
|
||
canvas.DrawText("Tap to load bitmap", info.Width / 2, 5 * info.Height / 6, paint); | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|
73 changes: 73 additions & 0 deletions
73
8.0/SkiaSharp/SkiaSharpDemos/SkiaSharpDemos/Basics/BasicsMenuPage.xaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
<?xml version="1.0" encoding="utf-8" ?> | ||
<local:BasePage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" | ||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" | ||
xmlns:local="clr-namespace:SkiaSharpDemos" | ||
x:Class="SkiaSharpDemos.Basics.BasicsMenuPage" | ||
Title="SkiaSharp Drawing Basics"> | ||
<TableView Intent="Menu"> | ||
<TableRoot> | ||
<TableSection Title="Drawing a Simple Circle"> | ||
<TextCell Text="Simple Circle" | ||
Detail="Outline and fill a circle with SkiaSharp" | ||
Command="{Binding NavigateCommand}" | ||
CommandParameter="{x:Type local:Basics.SimpleCirclePage}" /> | ||
</TableSection> | ||
<TableSection Title="Integrating with .NET MAUI"> | ||
<TextCell Text="Tap Toggle Fill" | ||
Detail="Tap the screen to toggle the circle fill" | ||
Command="{Binding NavigateCommand}" | ||
CommandParameter="{x:Type local:Basics.TapToggleFillPage}" /> | ||
<TextCell Text="Color Explore" | ||
Detail="Use sliders to select color" | ||
Command="{Binding NavigateCommand}" | ||
CommandParameter="{x:Type local:Basics.ColorExplorePage}" /> | ||
</TableSection> | ||
<TableSection Title="Pixels and Device-Independent Units"> | ||
<TextCell Text="Surface Size" | ||
Detail="Display the surface size three different ways" | ||
Command="{Binding NavigateCommand}" | ||
CommandParameter="{x:Type local:Basics.SurfaceSizePage}" /> | ||
<TextCell Text="Ellipse Fill" | ||
Detail="Fill the surface with an ellipse" | ||
Command="{Binding NavigateCommand}" | ||
CommandParameter="{x:Type local:Basics.EllipseFillPage}" /> | ||
</TableSection> | ||
<TableSection Title="Basic Animation"> | ||
<TextCell Text="Pulsating Ellipse" | ||
Detail="Animate the axes of an ellipse" | ||
Command="{Binding NavigateCommand}" | ||
CommandParameter="{x:Type local:Basics.PulsatingEllipsePage}" /> | ||
<TextCell Text="Expanding Circles" | ||
Detail="Animate circles to expand forever" | ||
Command="{Binding NavigateCommand}" | ||
CommandParameter="{x:Type local:Basics.ExpandingCirclesPage}" /> | ||
</TableSection> | ||
<TableSection Title="Integrating Text and Graphics"> | ||
<TextCell Text="Framed Text" | ||
Detail="Draw a rounded rectangle around a text string" | ||
Command="{Binding NavigateCommand}" | ||
CommandParameter="{x:Type local:Basics.FramedTextPage}" /> | ||
<TextCell Text="Outlined Text" | ||
Detail="Outline text characters" | ||
Command="{Binding NavigateCommand}" | ||
CommandParameter="{x:Type local:Basics.OutlinedTextPage}" /> | ||
</TableSection> | ||
<TableSection Title="Bitmap Basics"> | ||
<TextCell Text="Basic Bitmaps" | ||
Detail="Load and display bitmaps" | ||
Command="{Binding NavigateCommand}" | ||
CommandParameter="{x:Type local:Basics.BasicBitmapsPage}" /> | ||
</TableSection> | ||
<TableSection Title="Transparency"> | ||
<TextCell Text="Code More Code" | ||
Detail="Animate the alpha channel to fade between text strings" | ||
Command="{Binding NavigateCommand}" | ||
CommandParameter="{x:Type local:Basics.CodeMoreCodePage}" /> | ||
<TextCell Text="Bitmap Dissolve" | ||
Detail="Use a transparency to dissolve between one bitmap and another" | ||
Command="{Binding NavigateCommand}" | ||
CommandParameter="{x:Type local:Basics.BitmapDissolvePage}" /> | ||
</TableSection> | ||
</TableRoot> | ||
</TableView> | ||
</local:BasePage> |
9 changes: 9 additions & 0 deletions
9
8.0/SkiaSharp/SkiaSharpDemos/SkiaSharpDemos/Basics/BasicsMenuPage.xaml.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
namespace SkiaSharpDemos.Basics; | ||
|
||
public partial class BasicsMenuPage : BasePage | ||
{ | ||
public BasicsMenuPage() | ||
{ | ||
InitializeComponent(); | ||
} | ||
} |
Oops, something went wrong.