Skip to content

Commit

Permalink
1.5.8
Browse files Browse the repository at this point in the history
  • Loading branch information
afriscic committed Oct 1, 2024
1 parent 7f1d5a0 commit e26d533
Show file tree
Hide file tree
Showing 12 changed files with 309 additions and 261 deletions.
17 changes: 6 additions & 11 deletions BarcodeScanning.Native.Maui/BarcodeScanning.Native.Maui.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<SingleProject>true</SingleProject>
<ImplicitUsings>enable</ImplicitUsings>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Version>1.5.7</Version>
<Version>1.5.8</Version>
<Authors>Alen Friščić</Authors>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageReadmeFile>README.md</PackageReadmeFile>
Expand Down Expand Up @@ -49,17 +49,12 @@
</ItemGroup>

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

<PackageReference Include="Xamarin.AndroidX.Activity.Ktx" Version="1.9.0.3" />
<PackageReference Include="Xamarin.AndroidX.Collection.Ktx" Version="1.4.0.4" />
<PackageReference Include="Xamarin.AndroidX.Lifecycle.Process" Version="2.8.2.1" />
<PackageReference Include="Xamarin.AndroidX.Lifecycle.Runtime" Version="2.8.2.1" />
<PackageReference Include="Xamarin.AndroidX.Lifecycle.Runtime.Ktx" Version="2.8.2.1" />
<PackageReference Include="Xamarin.AndroidX.Lifecycle.ViewModel" Version="2.8.2.1" />
<PackageReference Include="Xamarin.AndroidX.Lifecycle.ViewModel.Ktx" Version="2.8.2.1" />
<PackageReference Include="Xamarin.AndroidX.Activity.Ktx" Version="1.9.2.1" />
<PackageReference Include="Xamarin.AndroidX.Collection.Ktx" Version="1.4.4" />
</ItemGroup>

<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-windows'))">
Expand Down
2 changes: 1 addition & 1 deletion BarcodeScanning.Native.Maui/CameraView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public ICommand OnImageCapturedCommand
public static readonly BindableProperty VibrationOnDetectedProperty = BindableProperty.Create(nameof(VibrationOnDetected)
, typeof(bool)
, typeof(CameraView)
, true
, false
, BindingMode.TwoWay
, propertyChanged: (bindable, value, newValue) => ((CameraView)bindable).VibrationOnDetected = (bool)newValue);
/// <summary>
Expand Down
116 changes: 106 additions & 10 deletions BarcodeScanning.Native.Maui/Platform/Android/BarcodeAnalyzer.cs
Original file line number Diff line number Diff line change
@@ -1,43 +1,139 @@
using AndroidX.Camera.Core;
using Android.Gms.Tasks;
using AndroidX.Camera.Core;
using AndroidX.Camera.View.Transform;
using Microsoft.Maui.Graphics.Platform;
using System.Diagnostics;
using Xamarin.Google.MLKit.Vision.Common;

using Size = Android.Util.Size;

namespace BarcodeScanning;

internal class BarcodeAnalyzer : Java.Lang.Object, ImageAnalysis.IAnalyzer
internal class BarcodeAnalyzer : Java.Lang.Object, ImageAnalysis.IAnalyzer, IOnSuccessListener, IOnCompleteListener
{
public Size DefaultTargetResolution => Methods.TargetResolution(CaptureQuality.Medium);
public int TargetCoordinateSystem => ImageAnalysis.CoordinateSystemOriginal;

private CoordinateTransform _coordinateTransform;
private bool _processInverted;
private IImageProxy _proxy;

private readonly HashSet<BarcodeResult> _barcodeResults;
private readonly CameraManager _cameraManager;

internal BarcodeAnalyzer(CameraManager cameraManager)
{
_barcodeResults = [];
_cameraManager = cameraManager;
_processInverted = false;
}

public void Analyze(IImageProxy proxy)
{
try
{
_cameraManager?.AnalyzeFrame(proxy);
_proxy = proxy;
_barcodeResults.Clear();

if (_cameraManager.CameraView.CaptureNextFrame)
{
_cameraManager.CameraView.CaptureNextFrame = false;
var image = new PlatformImage(_proxy.ToBitmap());
_cameraManager.CameraView.TriggerOnImageCaptured(image);
}

if (_cameraManager.RecalculateCoordinateTransform || _coordinateTransform is null)
_coordinateTransform = _cameraManager.GetCoordinateTransform(_proxy);

_processInverted = _cameraManager.CameraView.ForceInverted;
using var inputImage = InputImage.FromMediaImage(_proxy.Image, _proxy.ImageInfo.RotationDegrees);
_cameraManager.BarcodeScanner.Process(inputImage).AddOnSuccessListener(this).AddOnCompleteListener(this);
}
catch (Exception ex)
catch (Exception)
{
Debug.WriteLine(ex);
CloseProxy();
}
}

public void OnSuccess(Java.Lang.Object result)
{
try
{
Methods.ProcessBarcodeResult(result, _barcodeResults, _coordinateTransform);

if (!_processInverted)
{
if (_cameraManager.CameraView.AimMode)
{
var previewCenter = new Point(_cameraManager.PreviewView.Width / 2, _cameraManager.PreviewView.Height / 2);

foreach (var barcode in _barcodeResults)
{
if (!barcode.PreviewBoundingBox.Contains(previewCenter))
_barcodeResults.Remove(barcode);
}
}

if (_cameraManager.CameraView.ViewfinderMode)
{
var previewRect = new RectF(0, 0, _cameraManager.PreviewView.Width, _cameraManager.PreviewView.Height);

foreach (var barcode in _barcodeResults)
{
if (!previewRect.Contains(barcode.PreviewBoundingBox))
_barcodeResults.Remove(barcode);
}
}

_cameraManager?.CameraView?.DetectionFinished(_barcodeResults);
}
}
finally
catch (Exception)
{
}
}

public void OnComplete(Android.Gms.Tasks.Task task)
{
if (_processInverted)
{
try
{
proxy?.Close();
Methods.InvertLuminance(_proxy.Image);

_processInverted = false;
using var inputImage = InputImage.FromMediaImage(_proxy.Image, _proxy.ImageInfo.RotationDegrees);
_cameraManager.BarcodeScanner.Process(inputImage).AddOnSuccessListener(this).AddOnCompleteListener(this);
}
catch (Exception ex)
catch (Exception)
{
Debug.WriteLine(ex);
MainThread.BeginInvokeOnMainThread(() => _cameraManager?.Start());
CloseProxy();
}
}
else
{
CloseProxy();
}

}

private void CloseProxy()
{
try
{
_proxy?.Close();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
MainThread.BeginInvokeOnMainThread(() => _cameraManager?.Start());
}
}

protected override void Dispose(bool disposing)
{
_coordinateTransform?.Dispose();

base.Dispose(disposing);
}
}
Loading

0 comments on commit e26d533

Please sign in to comment.