From 7126f8cb6c00dea8936896e5b7c13ae3435d1a01 Mon Sep 17 00:00:00 2001 From: Thomas Galliker Date: Fri, 13 Sep 2024 09:22:22 +0200 Subject: [PATCH 1/4] Disable nullability in sample app --- Samples/CameraDemoApp/CameraDemoApp.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Samples/CameraDemoApp/CameraDemoApp.csproj b/Samples/CameraDemoApp/CameraDemoApp.csproj index 129bb5e..2a81fbf 100644 --- a/Samples/CameraDemoApp/CameraDemoApp.csproj +++ b/Samples/CameraDemoApp/CameraDemoApp.csproj @@ -8,7 +8,7 @@ 8.0.82 true enable - enable + disable CameraDemoApp From 1aa6ea379bd9ed289c85289e3e3dec4d3736e157 Mon Sep 17 00:00:00 2001 From: Thomas Galliker Date: Fri, 13 Sep 2024 10:29:10 +0200 Subject: [PATCH 2/4] Extend file picker demo with barcode result overlay --- .../Android/Services/BarcodeScanner.cs | 11 +++++++-- Samples/CameraDemoApp/MauiProgram.cs | 1 + .../ViewModels/FilePickerViewModel.cs | 12 ++++++---- .../CameraDemoApp/Views/FilePickerPage.xaml | 23 +++++++++++++++---- 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/CameraScanner.Maui/Platforms/Android/Services/BarcodeScanner.cs b/CameraScanner.Maui/Platforms/Android/Services/BarcodeScanner.cs index 03a8608..70752fe 100644 --- a/CameraScanner.Maui/Platforms/Android/Services/BarcodeScanner.cs +++ b/CameraScanner.Maui/Platforms/Android/Services/BarcodeScanner.cs @@ -123,8 +123,15 @@ internal static void ProcessBarcodeResult(Java.Lang.Object inputResults, HashSet } else { - previewRect = RectF.Zero; - cornerPoints = []; + previewRect = rectF.AsRectangleF(); + cornerPoints = barcode.GetCornerPoints() + .Select(p => + { + var pointF = new global::Android.Graphics.PointF(p); + return pointF; + }) + .Select(p => new Point(p.X, p.Y)) + .ToArray(); } diff --git a/Samples/CameraDemoApp/MauiProgram.cs b/Samples/CameraDemoApp/MauiProgram.cs index 20e31ef..81804cb 100644 --- a/Samples/CameraDemoApp/MauiProgram.cs +++ b/Samples/CameraDemoApp/MauiProgram.cs @@ -38,6 +38,7 @@ public static MauiApp CreateMauiApp() builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(_ => Launcher.Default); + builder.Services.AddSingleton(_ => MediaPicker.Default); // Register pages and view models builder.Services.AddTransient(); diff --git a/Samples/CameraDemoApp/ViewModels/FilePickerViewModel.cs b/Samples/CameraDemoApp/ViewModels/FilePickerViewModel.cs index 300d09d..61a7165 100644 --- a/Samples/CameraDemoApp/ViewModels/FilePickerViewModel.cs +++ b/Samples/CameraDemoApp/ViewModels/FilePickerViewModel.cs @@ -2,28 +2,30 @@ using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Microsoft.Extensions.Logging; -using Microsoft.Maui.Graphics.Platform; namespace CameraDemoApp.ViewModels { public class FilePickerViewModel : ObservableObject { private readonly ILogger logger; + private readonly IMediaPicker mediaPicker; private readonly IBarcodeScanner barcodeScanner; - private PlatformImage image; + private ImageSource image; private IAsyncRelayCommand pickPhotoCommand; private BarcodeResult[] barcodeResults; public FilePickerViewModel( ILogger logger, + IMediaPicker mediaPicker, IBarcodeScanner barcodeScanner) { this.logger = logger; + this.mediaPicker = mediaPicker; this.barcodeScanner = barcodeScanner; } - public PlatformImage Image + public ImageSource Image { get => this.image; private set => this.SetProperty(ref this.image, value); @@ -45,7 +47,7 @@ private async Task PickPhotoAsync() try { var options = new MediaPickerOptions { Title = "Test picker" }; - var fileResult = await MediaPicker.PickPhotoAsync(options); + var fileResult = await this.mediaPicker.PickPhotoAsync(options); if (fileResult != null) { // save the file into local storage @@ -57,6 +59,7 @@ private async Task PickPhotoAsync() //await sourceStream.CopyToAsync(localFileStream); var barcodeResults = await this.barcodeScanner.ScanFromImageAsync(fileResult); + this.Image = ImageSource.FromFile(fileResult.FullPath); this.BarcodeResults = barcodeResults.ToArray(); } } @@ -64,6 +67,7 @@ private async Task PickPhotoAsync() { this.logger.LogError(ex, "PickPhotoAsync failed with exception"); this.BarcodeResults = []; + this.Image = null; } } } diff --git a/Samples/CameraDemoApp/Views/FilePickerPage.xaml b/Samples/CameraDemoApp/Views/FilePickerPage.xaml index f7a2875..c265558 100644 --- a/Samples/CameraDemoApp/Views/FilePickerPage.xaml +++ b/Samples/CameraDemoApp/Views/FilePickerPage.xaml @@ -23,24 +23,37 @@ RowDefinitions="*, Auto, Auto" RowSpacing="16"> - + + + + + + + + - -