「MAUIでSkiaSharpを使う」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) (ページの作成:「MAUIでSkiaSharpを使う方法は公式サイトにあるが機械翻訳がわかりにくい。 * https://learn.microsoft.com/ja-jp/dotnet/maui/migration/skiash…」) |
Administrator (トーク | 投稿記録) (→CS) |
||
(同じ利用者による、間の7版が非表示) | |||
3行目: | 3行目: | ||
== NuGet == | == NuGet == | ||
+ | 以下のNuGetをぶちこむ。 | ||
* SkiaSharp.Views.Maui.Controls | * SkiaSharp.Views.Maui.Controls | ||
32行目: | 33行目: | ||
return builder.Build(); | return builder.Build(); | ||
} | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | === XAML === | ||
+ | <source lang=xml> | ||
+ | <?xml version="1.0" encoding="utf-8" ?> | ||
+ | <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" | ||
+ | xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" | ||
+ | xmlns:skia="clr-namespace:SkiaSharp.Views.Maui.Controls;assembly=SkiaSharp.Views.Maui.Controls" | ||
+ | x:Class="Maui8.MainPage"> | ||
+ | |||
+ | <skia:SKCanvasView x:Name="canvasView" | ||
+ | PaintSurface="canvasViewPaintSurface" | ||
+ | VerticalOptions="Fill" | ||
+ | HorizontalOptions="Fill" | ||
+ | /> | ||
+ | |||
+ | </ContentPage> | ||
+ | </source> | ||
+ | |||
+ | === CS === | ||
+ | 更新はメインスレッドでやる。 | ||
+ | <source lang="csharp"> | ||
+ | await MainThread.InvokeOnMainThreadAsync(() => | ||
+ | { | ||
+ | if (_bitmap != null) | ||
+ | _bitmap.Dispose(); | ||
+ | _bitmap = bitmap; | ||
+ | |||
+ | canvasView.InvalidateSurface(); | ||
+ | }); | ||
+ | </source> | ||
+ | |||
+ | 描画 | ||
+ | <source lang="csharp"> | ||
+ | void canvasViewPaintSurface(Object sender, SKPaintSurfaceEventArgs e) | ||
+ | { | ||
+ | if (_bitmap == null) | ||
+ | return; | ||
+ | using var canvas = e.Surface.Canvas; | ||
+ | canvas.Clear(); | ||
+ | canvas.DrawBitmap(_bitmap, x:0, y:0); | ||
} | } | ||
</source> | </source> | ||
[[category: MAUI]] | [[category: MAUI]] |
2024年3月4日 (月) 07:12時点における最新版
MAUIでSkiaSharpを使う方法は公式サイトにあるが機械翻訳がわかりにくい。
NuGet[編集 | ソースを編集]
以下のNuGetをぶちこむ。
- SkiaSharp.Views.Maui.Controls
MauiAppBuilder[編集 | ソースを編集]
MainProgram.csに「using SkiaSharp.Views.Maui.Controls.Hosting;」と「.UseSkiaSharp()」を追加する。
using Microsoft.Extensions.Logging;
using SkiaSharp.Views.Maui.Controls.Hosting;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.UseSkiaSharp()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
});
#if DEBUG
builder.Logging.AddDebug();
#endif
return builder.Build();
}
}
XAML[編集 | ソースを編集]
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:skia="clr-namespace:SkiaSharp.Views.Maui.Controls;assembly=SkiaSharp.Views.Maui.Controls"
x:Class="Maui8.MainPage">
<skia:SKCanvasView x:Name="canvasView"
PaintSurface="canvasViewPaintSurface"
VerticalOptions="Fill"
HorizontalOptions="Fill"
/>
</ContentPage>
CS[編集 | ソースを編集]
更新はメインスレッドでやる。
await MainThread.InvokeOnMainThreadAsync(() =>
{
if (_bitmap != null)
_bitmap.Dispose();
_bitmap = bitmap;
canvasView.InvalidateSurface();
});
描画
void canvasViewPaintSurface(Object sender, SKPaintSurfaceEventArgs e)
{
if (_bitmap == null)
return;
using var canvas = e.Surface.Canvas;
canvas.Clear();
canvas.DrawBitmap(_bitmap, x:0, y:0);
}