Skip to content

Commit e26d533

Browse files
committed
1.5.8
1 parent 7f1d5a0 commit e26d533

12 files changed

+309
-261
lines changed

BarcodeScanning.Native.Maui/BarcodeScanning.Native.Maui.csproj

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<SingleProject>true</SingleProject>
99
<ImplicitUsings>enable</ImplicitUsings>
1010
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
11-
<Version>1.5.7</Version>
11+
<Version>1.5.8</Version>
1212
<Authors>Alen Friščić</Authors>
1313
<PackageLicenseExpression>MIT</PackageLicenseExpression>
1414
<PackageReadmeFile>README.md</PackageReadmeFile>
@@ -49,17 +49,12 @@
4949
</ItemGroup>
5050

5151
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0-android'">
52-
<PackageReference Include="Xamarin.Google.MLKit.BarcodeScanning" Version="117.2.0.6" />
53-
<PackageReference Include="Xamarin.AndroidX.Camera.View" Version="1.3.4" />
54-
<PackageReference Include="Xamarin.AndroidX.Camera.Camera2" Version="1.3.4" />
52+
<PackageReference Include="Xamarin.Google.MLKit.BarcodeScanning" Version="117.3.0" />
53+
<PackageReference Include="Xamarin.AndroidX.Camera.View" Version="1.3.4.3" />
54+
<PackageReference Include="Xamarin.AndroidX.Camera.Camera2" Version="1.3.4.3" />
5555

56-
<PackageReference Include="Xamarin.AndroidX.Activity.Ktx" Version="1.9.0.3" />
57-
<PackageReference Include="Xamarin.AndroidX.Collection.Ktx" Version="1.4.0.4" />
58-
<PackageReference Include="Xamarin.AndroidX.Lifecycle.Process" Version="2.8.2.1" />
59-
<PackageReference Include="Xamarin.AndroidX.Lifecycle.Runtime" Version="2.8.2.1" />
60-
<PackageReference Include="Xamarin.AndroidX.Lifecycle.Runtime.Ktx" Version="2.8.2.1" />
61-
<PackageReference Include="Xamarin.AndroidX.Lifecycle.ViewModel" Version="2.8.2.1" />
62-
<PackageReference Include="Xamarin.AndroidX.Lifecycle.ViewModel.Ktx" Version="2.8.2.1" />
56+
<PackageReference Include="Xamarin.AndroidX.Activity.Ktx" Version="1.9.2.1" />
57+
<PackageReference Include="Xamarin.AndroidX.Collection.Ktx" Version="1.4.4" />
6358
</ItemGroup>
6459

6560
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-windows'))">

BarcodeScanning.Native.Maui/CameraView.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public ICommand OnImageCapturedCommand
3232
public static readonly BindableProperty VibrationOnDetectedProperty = BindableProperty.Create(nameof(VibrationOnDetected)
3333
, typeof(bool)
3434
, typeof(CameraView)
35-
, true
35+
, false
3636
, BindingMode.TwoWay
3737
, propertyChanged: (bindable, value, newValue) => ((CameraView)bindable).VibrationOnDetected = (bool)newValue);
3838
/// <summary>
Lines changed: 106 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,139 @@
1-
using AndroidX.Camera.Core;
1+
using Android.Gms.Tasks;
2+
using AndroidX.Camera.Core;
3+
using AndroidX.Camera.View.Transform;
4+
using Microsoft.Maui.Graphics.Platform;
25
using System.Diagnostics;
6+
using Xamarin.Google.MLKit.Vision.Common;
37

48
using Size = Android.Util.Size;
59

610
namespace BarcodeScanning;
711

8-
internal class BarcodeAnalyzer : Java.Lang.Object, ImageAnalysis.IAnalyzer
12+
internal class BarcodeAnalyzer : Java.Lang.Object, ImageAnalysis.IAnalyzer, IOnSuccessListener, IOnCompleteListener
913
{
1014
public Size DefaultTargetResolution => Methods.TargetResolution(CaptureQuality.Medium);
1115
public int TargetCoordinateSystem => ImageAnalysis.CoordinateSystemOriginal;
1216

17+
private CoordinateTransform _coordinateTransform;
18+
private bool _processInverted;
19+
private IImageProxy _proxy;
20+
21+
private readonly HashSet<BarcodeResult> _barcodeResults;
1322
private readonly CameraManager _cameraManager;
1423

1524
internal BarcodeAnalyzer(CameraManager cameraManager)
1625
{
26+
_barcodeResults = [];
1727
_cameraManager = cameraManager;
28+
_processInverted = false;
1829
}
1930

2031
public void Analyze(IImageProxy proxy)
2132
{
2233
try
2334
{
24-
_cameraManager?.AnalyzeFrame(proxy);
35+
_proxy = proxy;
36+
_barcodeResults.Clear();
37+
38+
if (_cameraManager.CameraView.CaptureNextFrame)
39+
{
40+
_cameraManager.CameraView.CaptureNextFrame = false;
41+
var image = new PlatformImage(_proxy.ToBitmap());
42+
_cameraManager.CameraView.TriggerOnImageCaptured(image);
43+
}
44+
45+
if (_cameraManager.RecalculateCoordinateTransform || _coordinateTransform is null)
46+
_coordinateTransform = _cameraManager.GetCoordinateTransform(_proxy);
47+
48+
_processInverted = _cameraManager.CameraView.ForceInverted;
49+
using var inputImage = InputImage.FromMediaImage(_proxy.Image, _proxy.ImageInfo.RotationDegrees);
50+
_cameraManager.BarcodeScanner.Process(inputImage).AddOnSuccessListener(this).AddOnCompleteListener(this);
2551
}
26-
catch (Exception ex)
52+
catch (Exception)
2753
{
28-
Debug.WriteLine(ex);
54+
CloseProxy();
55+
}
56+
}
57+
58+
public void OnSuccess(Java.Lang.Object result)
59+
{
60+
try
61+
{
62+
Methods.ProcessBarcodeResult(result, _barcodeResults, _coordinateTransform);
63+
64+
if (!_processInverted)
65+
{
66+
if (_cameraManager.CameraView.AimMode)
67+
{
68+
var previewCenter = new Point(_cameraManager.PreviewView.Width / 2, _cameraManager.PreviewView.Height / 2);
69+
70+
foreach (var barcode in _barcodeResults)
71+
{
72+
if (!barcode.PreviewBoundingBox.Contains(previewCenter))
73+
_barcodeResults.Remove(barcode);
74+
}
75+
}
76+
77+
if (_cameraManager.CameraView.ViewfinderMode)
78+
{
79+
var previewRect = new RectF(0, 0, _cameraManager.PreviewView.Width, _cameraManager.PreviewView.Height);
80+
81+
foreach (var barcode in _barcodeResults)
82+
{
83+
if (!previewRect.Contains(barcode.PreviewBoundingBox))
84+
_barcodeResults.Remove(barcode);
85+
}
86+
}
87+
88+
_cameraManager?.CameraView?.DetectionFinished(_barcodeResults);
89+
}
2990
}
30-
finally
91+
catch (Exception)
92+
{
93+
}
94+
}
95+
96+
public void OnComplete(Android.Gms.Tasks.Task task)
97+
{
98+
if (_processInverted)
3199
{
32100
try
33101
{
34-
proxy?.Close();
102+
Methods.InvertLuminance(_proxy.Image);
103+
104+
_processInverted = false;
105+
using var inputImage = InputImage.FromMediaImage(_proxy.Image, _proxy.ImageInfo.RotationDegrees);
106+
_cameraManager.BarcodeScanner.Process(inputImage).AddOnSuccessListener(this).AddOnCompleteListener(this);
35107
}
36-
catch (Exception ex)
108+
catch (Exception)
37109
{
38-
Debug.WriteLine(ex);
39-
MainThread.BeginInvokeOnMainThread(() => _cameraManager?.Start());
110+
CloseProxy();
40111
}
41112
}
113+
else
114+
{
115+
CloseProxy();
116+
}
117+
118+
}
119+
120+
private void CloseProxy()
121+
{
122+
try
123+
{
124+
_proxy?.Close();
125+
}
126+
catch (Exception ex)
127+
{
128+
Debug.WriteLine(ex);
129+
MainThread.BeginInvokeOnMainThread(() => _cameraManager?.Start());
130+
}
131+
}
132+
133+
protected override void Dispose(bool disposing)
134+
{
135+
_coordinateTransform?.Dispose();
136+
137+
base.Dispose(disposing);
42138
}
43139
}

0 commit comments

Comments
 (0)