{"id":137,"date":"2023-10-17T13:29:22","date_gmt":"2023-10-17T12:29:22","guid":{"rendered":"https:\/\/coding4phone.com\/?p=137"},"modified":"2024-01-10T11:29:59","modified_gmt":"2024-01-10T10:29:59","slug":"lire-un-qr-code-avec-net-maui","status":"publish","type":"post","link":"https:\/\/coding4phone.com\/?p=137","title":{"rendered":"Lire un QR Code avec .NET MAUI"},"content":{"rendered":"\n<p>Les QR Code sont maintenant utilis\u00e9s de mani\u00e8re tr\u00e8s large. On en trouve partout, et depuis la pand\u00e9mie du COVID 19 il a \u00e9t\u00e9 extr\u00eamement mis en avant. Il faut bien avouer que c&rsquo;est pratique et simple \u00e0 utiliser et qu&rsquo;il existe \u00e9norm\u00e9ment de mani\u00e8res et d&rsquo;outils pour les g\u00e9n\u00e9rer.<\/p>\n\n\n\n<p>Tout naturellement, il devient important pour les d\u00e9veloppeurs d&rsquo;applications mobiles d&rsquo;\u00eatre en mesure de les lire pour les exploiter. Il existe \u00e0 cet effet \u00e9norm\u00e9ment de biblioth\u00e8ques pour iOS et Android qui permettent cela.<\/p>\n\n\n\n<p>Aujourd&rsquo;hui nous allons voir comment int\u00e9grer \u00e0 une application <a href=\"https:\/\/learn.microsoft.com\/fr-fr\/dotnet\/maui\/what-is-maui\">.NET MAUI<\/a> la lecture de QR Code. Gr\u00e2ce \u00e0 .NET MAUI, vous allez \u00eatre en mesure lire des QR Code pour iOS, Android, Windows et Mac et ce avec un seul code C# !<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">R\u00e9f\u00e9rencer le composant de lecture<\/h2>\n\n\n\n<p>Nous allons utiliser le composant <strong>Camera.MAUI<\/strong> propos\u00e9 par <strong>hjam40<\/strong>. Il est bas\u00e9 sur la biblioth\u00e8que \u00ab\u00a0ZXing.Net\u00a0\u00bb  pour la lecture et le d\u00e9codage de codes divers et vari\u00e9s (dont les QR Code, \u00e7a tombe bien). <a href=\"https:\/\/github.com\/hjam40\/Camera.MAUI\">Les sources de ce composant<\/a> sont disponibles sur GitHub.<\/p>\n\n\n\n<p>Pour ajouter ce composant, vous devez aller dans la gestion des packages Nuget, rechercher \u00ab\u00a0Camera.MAUI\u00a0\u00bb et l&rsquo;installer.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"613\" height=\"127\" data-attachment-id=\"149\" data-permalink=\"https:\/\/coding4phone.com\/?attachment_id=149#main\" data-orig-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img1.png?fit=613%2C127&amp;ssl=1\" data-orig-size=\"613,127\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"c4p_maui_qrcode_reader_img1\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img1.png?fit=300%2C62&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img1.png?fit=613%2C127&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img1.png?resize=613%2C127&#038;ssl=1\" alt=\"\" class=\"wp-image-149\" srcset=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img1.png?w=613&amp;ssl=1 613w, https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img1.png?resize=300%2C62&amp;ssl=1 300w\" sizes=\"auto, (max-width: 613px) 100vw, 613px\" \/><\/figure>\n\n\n\n<p>Vous devez ensuite enregistrer ce nouveau composant au niveau de l&rsquo;application. Pour cela il suffit d&rsquo;ajouter la ligne \u00ab\u00a0.UseMauiCameraView()\u00a0\u00bb dans le code C# du fichier \u00ab\u00a0MauiProgram.cs\u00a0\u00bb<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic static MauiApp CreateMauiApp()\n{\n\tvar builder = MauiApp.CreateBuilder();\n\tbuilder\n\t\t.UseMauiApp&lt;App&gt;()\n\t\t.UseMauiCameraView()\n\t\t.ConfigureFonts(fonts =&gt;\n\t\t{\n\t\t\tfonts.AddFont(&quot;OpenSans-Regular.ttf&quot;, &quot;OpenSansRegular&quot;);\n\t\t\tfonts.AddFont(&quot;OpenSans-Semibold.ttf&quot;, &quot;OpenSansSemibold&quot;);\n\t\t});\n\n#if DEBUG\n\tbuilder.Logging.AddDebug();\n#endif\n\n\treturn builder.Build();\n}\n<\/pre><\/div>\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Modifier la version minimum du SDK pris en charge par l&rsquo;application sous Android<\/h2>\n\n\n\n<p><strong>Camera.MAUI<\/strong> ne prend pas en charge les applications Android dont le SDK est inf\u00e9rieur \u00e0 API 25. Par d\u00e9faut un projet MAUI r\u00e8gle ce param\u00e8tre sur 21, ce qui est trop ancien. Il faut donc modifier cette valeur dans le fichier \u00ab\u00a0AndroidManifest.xml\u00a0\u00bb plac\u00e9 dans la dossier \u00ab\u00a0Platforms\\Android\u00a0\u00bb de votre projet :<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"177\" data-attachment-id=\"171\" data-permalink=\"https:\/\/coding4phone.com\/?attachment_id=171\" data-orig-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img3.png?fit=1438%2C249&amp;ssl=1\" data-orig-size=\"1438,249\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"c4p_maui_qrcode_reader_img3\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img3.png?fit=300%2C52&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img3.png?fit=1024%2C177&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img3.png?resize=1024%2C177&#038;ssl=1\" alt=\"\" class=\"wp-image-171\" srcset=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img3.png?resize=1024%2C177&amp;ssl=1 1024w, https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img3.png?resize=300%2C52&amp;ssl=1 300w, https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img3.png?resize=768%2C133&amp;ssl=1 768w, https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img3.png?w=1438&amp;ssl=1 1438w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p><em>Note : J&rsquo;ai pour habitude avec les projets MAUI de stipuler au minimum Android 8.0 (API 26) et de laisser comme cible Android 13.0 (API 33), qui est la valeur par d\u00e9faut des projets MAUI actuels.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ajouter les autorisations pour Android<\/h2>\n\n\n\n<p>Toujours dans le fichier \u00ab\u00a0AndroidManifest.xml\u00a0\u00bb vous devez stipuler que vous demandez l&rsquo;autorisation d&rsquo;acc\u00e8s \u00e0 la cam\u00e9ra. Le composant va s&rsquo;occuper tout seul de faire les demandes pour les versions d&rsquo;Android (r\u00e9centes) qui n\u00e9cessitent une demande explicite \u00e0 l&rsquo;utilisateur. A l&rsquo;initialisation du composant la demande d&rsquo;acc\u00e8s \u00e0 la cam\u00e9ra sera effectu\u00e9e et il faudra bien autoriser l&rsquo;acc\u00e8s pour que le composant fonctionne. Dans le cas contraire, le composant ne s&rsquo;affichera simplement pas.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"291\" data-attachment-id=\"160\" data-permalink=\"https:\/\/coding4phone.com\/?attachment_id=160#main\" data-orig-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img2.png?fit=1447%2C411&amp;ssl=1\" data-orig-size=\"1447,411\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"c4p_maui_qrcode_reader_img2\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img2.png?fit=300%2C85&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img2.png?fit=1024%2C291&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img2.png?resize=1024%2C291&#038;ssl=1\" alt=\"\" class=\"wp-image-160\" srcset=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img2.png?resize=1024%2C291&amp;ssl=1 1024w, https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img2.png?resize=300%2C85&amp;ssl=1 300w, https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img2.png?resize=768%2C218&amp;ssl=1 768w, https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img2.png?w=1447&amp;ssl=1 1447w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ajouter les autorisations pour iOS<\/h2>\n\n\n\n<p>Dans le fichier \u00ab\u00a0info.plist\u00a0\u00bb plac\u00e9 dans le dossier \u00ab\u00a0Platforms\\iOS\u00a0\u00bb de votre projet, vous devez ajouter les 2 lignes XML suivantes :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n\t&lt;key&gt;NSCameraUsageDescription&lt;\/key&gt;\n\t&lt;string&gt;This app uses camera for...&lt;\/string&gt;\n<\/pre><\/div>\n\n\n<p>Ceci permet d&rsquo;indiquer \u00e0 l&rsquo;utilisateur pourquoi vous souhaitez acc\u00e9der \u00e0 la cam\u00e9ra. iOS fera alors la demande d&rsquo;acc\u00e8s \u00e0 l&rsquo;utilisateur lors de l&rsquo;initialisation du composant.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ajouter le composant \u00e0 une page<\/h2>\n\n\n\n<p>Pour utiliser ce composant dans une page vous devez y r\u00e9f\u00e9rencer son espace de nom (dans l&rsquo;exemple ci-dessous, j&rsquo;ai utilis\u00e9 \u00ab\u00a0camera\u00a0\u00bb) :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;\n&lt;ContentPage xmlns=&quot;http:\/\/schemas.microsoft.com\/dotnet\/2021\/maui&quot;\n             xmlns:x=&quot;http:\/\/schemas.microsoft.com\/winfx\/2009\/xaml&quot;\n             xmlns:camera=&quot;clr-namespace:Camera.MAUI;assembly=Camera.MAUI&quot;\n             x:Class=&quot;C4P_QRCodeReader_MAUI.MainPage&quot;&gt;\n\n&lt;\/ContentPage&gt;\n<\/pre><\/div>\n\n\n<p>Il suffit ensuite de placer le composant o\u00f9 vous le souhaitez dans votre structure UI dans le fichier XAML de la page.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;camera:CameraView \n\tx:Name=&quot;CameraView&quot; \n\tMargin=&quot;30,30,30,0&quot;               \n\tLoaded=&quot;CameraView_Loaded&quot; \n\tBarcodeDetected=&quot;CameraView_BarcodeDetected&quot; \n\tZoomFactor=&quot;{Binding Source={x:Reference ZoomSlider}, Path=Value}&quot;&gt;\n\n\t&lt;camera:CameraView.GestureRecognizers&gt;\n\t\t&lt;TapGestureRecognizer x:Name=&quot;CameraViewTapGesture&quot; Tapped=&quot;CameraViewTapGesture_Tapped&quot; \/&gt;\n\t&lt;\/camera:CameraView.GestureRecognizers&gt;\n\n&lt;\/camera:CameraView&gt;\n<\/pre><\/div>\n\n\n<p>Dans cet exemple (tir\u00e9 de l&rsquo;application d&rsquo;exemple li\u00e9e \u00e0 cet article) le composant porte le nom de \u00ab\u00a0CameraView\u00a0\u00bb, et sa propri\u00e9t\u00e9 \u00ab\u00a0ZoomFactor\u00a0\u00bb est li\u00e9e \u00e0 la valeur d&rsquo;un Slider dont le nom est \u00ab\u00a0ZoomSlider\u00a0\u00bb.<\/p>\n\n\n\n<p>Pour initialiser correctement le composant vous devez r\u00e9pondre \u00e0 son \u00e9v\u00e9nement \u00ab\u00a0Loaded\u00a0\u00bb et pour r\u00e9agir \u00e0 la d\u00e9tection d&rsquo;un code \u00e0 l&rsquo;\u00e9v\u00e9nement \u00ab\u00a0BarcodeDetected\u00a0\u00bb.<\/p>\n\n\n\n<p>Dans l&rsquo;application d&rsquo;exemple on force l&rsquo;activation de l&rsquo;autofocus via un tap sur le composant. Pour cela un \u00ab\u00a0TapGestureRecognizer\u00a0\u00bb est ajout\u00e9 au composant.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Param\u00e9trer le composant pour lire les QR Code<\/h2>\n\n\n\n<p>A un moment il faut indiquer au composant que sa mission consiste \u00e0 d\u00e9tecter et lire des QR Codes. Nous allons r\u00e9aliser ce param\u00e9trage depuis le code C# de la page. Ce param\u00e9trage peut se faire dans l&rsquo;\u00e9v\u00e9nement \u00ab\u00a0Loaded\u00a0\u00bb de la page.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nCameraView.BarCodeOptions = new Camera.MAUI.ZXingHelper.BarcodeDecodeOptions\n{\n\tAutoRotate = false,\n\tPossibleFormats = { ZXing.BarcodeFormat.QR_CODE },\n\tReadMultipleCodes = false,\n\tTryHarder = false,\n\tTryInverted = false\n};\n<\/pre><\/div>\n\n\n<p>Il est tout \u00e0 fait possible de r\u00e9f\u00e9rencer plusieurs formats en m\u00eame temps. <strong>Camera.MAUI<\/strong> sera alors en mesure de les d\u00e9tecter ensemble. La liste des formats support\u00e9s est assez importante :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Aztec 2D barcode format<\/li>\n\n\n\n<li>CODABAR 1D format<\/li>\n\n\n\n<li>Code 39 1D format<\/li>\n\n\n\n<li>Code 93 1D format<\/li>\n\n\n\n<li>Code 128 1D format<\/li>\n\n\n\n<li>Data Matrix 2D barcode format<\/li>\n\n\n\n<li>EAN-8 1D format.<\/li>\n\n\n\n<li>EAN-13 1D format.<\/li>\n\n\n\n<li>ITF (Interleaved Two of Five) 1D format<\/li>\n\n\n\n<li>MaxiCode 2D barcode format<\/li>\n\n\n\n<li>PDF417 format.<\/li>\n\n\n\n<li>QR Code 2D barcode format<\/li>\n\n\n\n<li>RSS 14<\/li>\n\n\n\n<li>RSS EXPANDED<\/li>\n\n\n\n<li>UPC-A 1D format<\/li>\n\n\n\n<li>UPC-E 1D format<\/li>\n\n\n\n<li>UPC\/EAN extension format. Not a stand-alone format<\/li>\n\n\n\n<li>MSI<\/li>\n\n\n\n<li>Plessey<\/li>\n\n\n\n<li>Intelligent Mail barcode<\/li>\n\n\n\n<li>Pharmacode format<\/li>\n<\/ul>\n\n\n\n<p>Quelques options suppl\u00e9mentaires permettent de g\u00e9rer finement le comportement attendu et aussi la quantit\u00e9 de ressources utilis\u00e9es (le nombre de thread de d\u00e9codage par exemple). Je vous invite vivement \u00e0 modifier ces valeurs et constater en live comment se comporte <strong>Camera.MAUI<\/strong>.<\/p>\n\n\n\n<p>Quoi qu&rsquo;il en soit, il ne faut surtout pas oublier d&rsquo;activer la d\u00e9tection de codes en pla\u00e7ant \u00e0 \u00ab\u00a0true\u00a0\u00bb sa propri\u00e9t\u00e9 \u00ab\u00a0BarCodeDetectionEnabled\u00a0\u00bb.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nCameraView.BarCodeDetectionFrameRate = 10;\nCameraView.BarCodeDetectionMaxThreads = 10;\nCameraView.ControlBarcodeResultDuplicate = false;\nCameraView.BarCodeDetectionEnabled = true;\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Activer le composant<\/h2>\n\n\n\n<p>Le d\u00e9marrage complet de <strong>Camera.MAUI<\/strong> se fait depuis son \u00e9v\u00e9nement \u00ab\u00a0Load\u00a0\u00bb :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nprivate async void CameraView_Loaded(object sender, EventArgs e)\n{\n\tif (CameraView.NumCamerasDetected &gt; 0)\n\t{\n\t\tCameraView.Camera = CameraView.Cameras.First();\n\t\tawait CameraView.StopCameraAsync();\n\t\tawait CameraView.StartCameraAsync();\n\t}\n}\n<\/pre><\/div>\n\n\n<p>Si aucune cam\u00e9ra n&rsquo;est disponible le composant restera invisible. Par d\u00e9faut on utilise la 1\u00e8re cam\u00e9ra, mais il est possible de g\u00e9rer le fait que votre machine poss\u00e8de plusieurs cam\u00e9ras (un PC sous Windows par  exemple).<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Sous Android, parfois, la qualit\u00e9 de l&rsquo;image retourn\u00e9e est assez m\u00e9diocre. Pour \u00e9viter ce probl\u00e8me il suffit au moment d&rsquo;activer la cam\u00e9ra de la stopper (m\u00eame si vous savez pertinemment qu&rsquo;elle n&rsquo;est pas activ\u00e9e) puis de la d\u00e9marrer. C&rsquo;est pourquoi dans le code ci-dessus on trouve les 2 commandes.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">R\u00e9cup\u00e9rer le code lu<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nprivate async void CameraView_BarcodeDetected(object sender, Camera.MAUI.ZXingHelper.BarcodeEventArgs args)\n{\n\tDebug.WriteLine(&quot;&#x5B;CAMERA VIEW] - BARCODE DETECTED&quot;);\n\n\tawait MainThread.InvokeOnMainThreadAsync(async () =&gt;\n\t{\n\t\tvar r = args.Result.FirstOrDefault();\n\n\t\tif (r != null)\n\t\t{\n\t\t\tLastCode = r.Text;\n\t\t\tDebug.WriteLine($&quot;&#x5B;CAMERA VIEW] - {r.Text}&quot;);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDebug.WriteLine(&quot;&#x5B;CAMERA VIEW] - NO RESULT !&quot;);\n\t\t}\n\t});\n}\n<\/pre><\/div>\n\n\n<p>Comme <strong>Camera.MAUI<\/strong> est capable de lire en une seule fois plusieurs codes (par exemple tous les codes pr\u00e9sents sur une feuille) il remonte une liste de r\u00e9sultats. Dans cet exemple on ne g\u00e8re que le 1er r\u00e9sultat. D&rsquo;ailleurs lors du param\u00e9trage on a bien stipul\u00e9 qu&rsquo;on ne veut pas de multi-scan par<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; gutter: false; title: ; notranslate\" title=\"\">\nReadMultipleCodes = false;\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">G\u00e9rer le zoom et la torche<\/h2>\n\n\n\n<p>Il est possible de stipuler le facteur de zoom que l&rsquo;on souhaite appliquer \u00e0 l&rsquo;image. Dans certains cas ce r\u00e9glage est indispensable pour \u00eatre en mesure de lire correctement un code. C&rsquo;est la propri\u00e9t\u00e9 \u00ab\u00a0ZoomFactor\u00a0\u00bb qui le permet. La valeur du zoom va de \u00ab\u00a0MinZoomFactor\u00a0\u00bb \u00e0 \u00ab\u00a0MaxZoomFactor\u00a0\u00bb. Dans cet exemple le zoom a \u00e9t\u00e9 param\u00e9tr\u00e9 de 1 \u00e0 5 pour des raisons de simplification, mais id\u00e9alement, dans la vraie vie, vous devrez utiliser les valeurs fournies par ces 2 propri\u00e9t\u00e9s.<\/p>\n\n\n\n<p>Il est possible aussi d&rsquo;allumer la torche via la propri\u00e9t\u00e9 \u00ab\u00a0TorchEnabled\u00a0\u00bb qu&rsquo;il suffit de placer \u00e0 \u00ab\u00a0true\u00a0\u00bb pour allumer et (vous l&rsquo;avez d\u00e9j\u00e0 compris) \u00e0 \u00ab\u00a0false\u00a0\u00bb pour l&rsquo;\u00e9teindre. Dans l&rsquo;application d&rsquo;exemple une petite image de torche permet d&rsquo;effectuer ces op\u00e9rations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Application d&rsquo;exemple<\/h2>\n\n\n\n<p>Cet article est fourni avec une application d&rsquo;exemple. Elle met en \u0153uvre tout ce qui a \u00e9t\u00e9 vue pr\u00e9c\u00e9demment et vous permettra de faire quelques tests avant d&rsquo;inclure ce composant dans vos propres r\u00e9alisations.<\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"370\" height=\"800\" data-attachment-id=\"189\" data-permalink=\"https:\/\/coding4phone.com\/?attachment_id=189\" data-orig-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img4.png?fit=370%2C800&amp;ssl=1\" data-orig-size=\"370,800\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"c4p_maui_qrcode_reader_img4\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img4.png?fit=139%2C300&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img4.png?fit=370%2C800&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img4.png?resize=370%2C800&#038;ssl=1\" alt=\"\" class=\"wp-image-189\" style=\"aspect-ratio:0.4625;object-fit:cover;width:180px\" srcset=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img4.png?w=370&amp;ssl=1 370w, https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/c4p_maui_qrcode_reader_img4.png?resize=139%2C300&amp;ssl=1 139w\" sizes=\"auto, (max-width: 370px) 100vw, 370px\" \/><\/figure>\n<\/div>\n\n\n<p><a href=\"https:\/\/github.com\/Sydney680928\/c4p_maui_qrcode_reader\">Lien GitHub vers l&rsquo;exemple<\/a>.<\/p>\n\n\n\n<p>Cet exemple a \u00e9t\u00e9 test\u00e9 sous iOS, Android et Windows.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tutoriel vid\u00e9o<\/h2>\n\n\n\n<p>Pour ceux qui sont \u00e0 l&rsquo;aise avec l&rsquo;anglais, il y a un <a href=\"https:\/\/www.youtube.com\/watch?v=FuvFrIS9wm0&amp;t=14s\">tr\u00e8s bon tutoriel vid\u00e9o<\/a> propos\u00e9 par <strong>G\u00e9rald Versluis<\/strong> sur <strong>Camera.MAUI<\/strong>. G\u00e9rald propose d&rsquo;ailleurs une tr\u00e8s grande quantit\u00e9 de tutoriels sur .NET MAUI. Je vous recommande vivement d&rsquo;aller explorer sa cha\u00eene YouTube.<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe loading=\"lazy\" class=\"youtube-player\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/FuvFrIS9wm0?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=fr-FR&#038;autohide=2&#038;start=14&#038;wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\"><\/iframe><\/span>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Gr\u00e2ce \u00e0 ce composant il est extr\u00eamement simple d&rsquo;inclure dans les applications .NET MAUI un lecteur de QR Code. Il est en plus capable de lire d&rsquo;autres types de codes ce qui permet d&rsquo;ouvrir un maximum de possibilit\u00e9s.<\/p>\n\n\n\n<p>Bonne d\u00e9couverte et bons d\u00e9veloppements.<\/p>\n\n\n\n<p>Steph<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nous allons voir comment lire des QR Codes depuis une application .NET MAUI.<br \/>\n<a href=\"https:\/\/www.coding4phone.com\/?p=137\"><br \/>\nLire la suite<br \/>\n<\/a><\/p>\n","protected":false},"author":1,"featured_media":135,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false},"categories":[5,25,9],"tags":[13,12,14,22],"class_list":["post-137","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-maui","category-csharp","category-tutoriel","tag-dotnet","tag-maui","tag-csharp","tag-tutoriel"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/coding4phone_qrcode_small.png?fit=200%2C200&ssl=1","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfoe4s-2d","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts\/137","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=137"}],"version-history":[{"count":59,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts\/137\/revisions"}],"predecessor-version":[{"id":655,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts\/137\/revisions\/655"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/media\/135"}],"wp:attachment":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=137"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=137"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=137"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}