フッターコンテンツにスキップ
IRONBARCODEの使用

MAUI バーコードスキャナー(IronBarcode搭載): ステップバイステップガイド

モバイルアプリケーションは、在庫管理、POSシステム、製品追跡において、バーコードスキャンへの依存度を高めている。 .NET MAUIアプリケーションにバーコード検出を統合し、カメラフィードと画像ファイル処理を組み合わせてQRコード、データマトリックス、その他のバーコードフォーマットを検出するMAUIバーコードスキャナーを構築します。 多くのライブラリがカメラプレビューに重点を置いているのに対し、 IronBarcodeは、斜めの角度、劣悪な照明、破損したラベルなど、困難な条件下でもバーコードを正確に読み取ることに優れており、特別な設定なしでそれらすべてに対応します。

このガイドでは、 IronBarcodeを使用して.NET MAUIプロジェクトにバーコード スキャンを実装するすべての手順を説明します。 最終的には、1つの画像ファイルから複数のバーコードをスキャンしたり、デバイスのカメラからバーコードをキャプチャしたり、ライブラリを自信を持って独自のクロスプラットフォームプロジェクトに統合したりできるようになります。

MAUIバーコードスキャナーを構築するための前提条件は何ですか?

始める前に、開発環境が整っていることを確認してください。

  • .NET MAUIワークロードがインストールされたVisual Studio 2022 (v17.8以降)
  • .NET 10 SDK --公式.NETサイトからダウンロード -基本的なC#の知識― async/awaitパターンに精通していると役立ちます
  • カメラテスト用に構成された物理デバイスまたはエミュレータ
  • IronBarcodeライセンス-無料トライアルで評価できます

プロジェクトを作成する前にVisual StudioにMAUIワークロードがインストールされていることを確認しておくと、後々のトラブルシューティングにかかる​​時間を大幅に節約できます。 Visual Studioインストーラーの"個別コンポーネント"で".NETマルチプラットフォームアプリUI開発"を検索することで、このことを確認できます。

IronBarcodeがMAUIにどのように適合するかを理解する

.NET MAUIは、Android、iOS、macOS、Windowsをターゲットとする単一のコードベースを提供します。 この環境におけるバーコードスキャンの課題は、各プラットフォームがカメラへのアクセスを異なる方法で処理することである。 IronBarcodeは、画像処理レイヤーで動作することでこの問題を解決します。MAUIのMediaPickerを介して画像をキャプチャし、分析のためにバイトをIronBarcodeに渡します。

このように関心を分離することで、コードが簡潔に保たれ、プラットフォーム固有のバーコードSDKを使用する必要がなくなります。 IronBarcodeのオフライン処理モデルは、バーコードデータがデバイスから外部に持ち出されないことを意味し、規制対象業界のアプリケーションにとって重要な意味を持つ。

サポートされているバーコードフォーマット

IronBarcodeは、以下を含む幅広いフォーマットを読み取ります。

IronBarcodeがサポートするバーコード形式
フォーマットカテゴリ フォーマット 一般的な使用例
1D線形 コード128、コード39、EAN-13、UPC-A、ITF 小売、物流、ヘルスケア
2次元行列 QRコード、データマトリックス、アステカ文字、PDF417 モバイル決済、チケット販売、製造業
郵便 USPS、ロイヤルメール、ドイツポスト 配送および郵便サービス
専門 MaxiCode、GS1、MicroPDF417 サプライチェーン、輸送、小包

MAUIバーコードスキャンプロジェクトの設定方法を教えてください

まず、Visual Studio 2022 で新しい.NET MAUIアプリ プロジェクトを作成します。プロジェクト名を BarcodeScannerApp とし、ターゲット フレームワークとして.NET 10 を選択します。 Visual Studioは、Android、iOS、macOS、Windowsそれぞれに対応したプラットフォーム固有のフォルダを含む、標準的なMAUIプロジェクト構造を生成します。

NuGet経由でIronBarcodeをインストールする

NuGetパッケージ マネージャー コンソールを開き、次を実行します。

Install-Package BarCode

または、ソリューションエクスプローラーでプロジェクトを右クリックし、" NuGetパッケージの管理"を選択して、"IronBarCode"を検索し、最新の安定版をインストールしてください。 特に.NET MAUIプロジェクトの場合、IronBarcodeのNuGetパッケージには必要なネイティブ依存関係がすべて含まれています。

ライセンスの有効化

インストール後、アプリケーションのライフサイクルの早い段階で、ライセンスキーを使用してIronBarcodeをアクティベートしてください。 最適な場所は、アプリBuilderが実行される前の MauiProgram.cs です。

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

IronSoftwareのウェブサイトから無料のトライアルライセンスキーを入手してください。トライアルキーを使用すると、開発期間中に時間制限なくすべての機能を評価できますが、正式なライセンスを適用するまでは、出力にトライアル版の透かしが表示される場合があります。

AndroidとiOSでカメラの権限を設定するにはどうすればいいですか?

プラットフォーム固有のカメラ権限はバーコードスキャン機能に不可欠です。 各プラットフォームは、MediaPicker.CapturePhotoAsync() が正常に動作する前に、マニフェストファイルに特定の構成が必要です。

Androidの権限

カメラアクセスを宣言するには、Platforms/Android/AndroidManifest.xml を編集してください。

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-feature android:name="android.hardware.camera.autofocus" />
XML

android.permission.CAMERA エントリは、ユーザーに実行時権限を要求します。 uses-feature 宣言は、アプリにカメラハードウェアとオートフォーカス機能が必要であることを Google Play ストアに通知します。 これらがなければ、Android端末は権限要求を許可しても、内部的にカメラへのアクセスをブロックしてしまう可能性があります。

Android 13 以降 (API レベル 33+) では、MainActivity.cs を使用して、ActivityCompat.RequestPermissions を使用して、きめ細かいメディア権限を処理する必要がある場合もあります。 MAUI MediaPicker の抽象化は、このほとんどを自動的に処理しますが、リリース前に実機テストを行うことをお勧めします。

iOSの権限

Platforms/iOS/Info.plist を修正して、カメラの使用説明を含めるようにします。

<key>NSCameraUsageDescription</key>
<string>This app requires camera access to scan barcodes</string>
<key>NSCameraUsageDescription</key>
<string>This app requires camera access to scan barcodes</string>
XML

iOSでは、プライバシーに関わるすべての権限について、人間が理解できる説明が求められます。 この説明文が欠落しているか曖昧な場合、AppleのApp Storeの審査プロセスでアプリは却下されます。 このテキストは、アプリが初めてカメラへのアクセスを要求する際にユーザーに表示されるシステム権限ダイアログに表示されます。

iPadOSの場合、ライブカメラに加えて保存済みの写真からバーコードをスキャンできるようにする予定がある場合は、NSPhotoLibraryUsageDescription を追加することも検討してください。

WindowsとmacOS

WindowsデスクトップおよびmacOSを対象とする場合、カメラへのアクセス権限は、それぞれアプリケーションマニフェストおよびエンタイトルメントファイルを通じて管理されます。 MAUIフレームワークはテンプレートレベルでこのほとんどを処理しますが、Windows上のPackage.appxmanifestにウェブカメラデバイス機能が含まれていることを確認してください。

バーコードスキャナーのインターフェースはどのように作成しますか?

MainPage.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"
             x:Class="BarcodeScannerApp.MainPage"
             Title="Barcode Scanner">
    <VerticalStackLayout Padding="20" Spacing="20">
        <Label Text="Point the camera at a barcode"
               FontSize="16"
               HorizontalOptions="Center"
               TextColor="#555555" />
        <Image x:Name="CapturedImage"
               HeightRequest="300"
               Aspect="AspectFit"
               BackgroundColor="#F0F0F0" />
        <Label x:Name="ResultLabel"
               Text="Tap Scan to begin"
               FontSize="18"
               HorizontalOptions="Center"
               FontAttributes="Bold" />
        <Label x:Name="FormatLabel"
               Text=""
               FontSize="13"
               HorizontalOptions="Center"
               TextColor="#888888" />
        <Button Text="Scan Barcode"
                Clicked="OnScanClicked"
                BackgroundColor="#007ACC"
                TextColor="White"
                CornerRadius="8"
                HeightRequest="50" />
        <Button Text="Load from Gallery"
                Clicked="OnPickFromGalleryClicked"
                BackgroundColor="#5C5C5C"
                TextColor="White"
                CornerRadius="8"
                HeightRequest="50" />
    </VerticalStackLayout>
</ContentPage>
<?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"
             x:Class="BarcodeScannerApp.MainPage"
             Title="Barcode Scanner">
    <VerticalStackLayout Padding="20" Spacing="20">
        <Label Text="Point the camera at a barcode"
               FontSize="16"
               HorizontalOptions="Center"
               TextColor="#555555" />
        <Image x:Name="CapturedImage"
               HeightRequest="300"
               Aspect="AspectFit"
               BackgroundColor="#F0F0F0" />
        <Label x:Name="ResultLabel"
               Text="Tap Scan to begin"
               FontSize="18"
               HorizontalOptions="Center"
               FontAttributes="Bold" />
        <Label x:Name="FormatLabel"
               Text=""
               FontSize="13"
               HorizontalOptions="Center"
               TextColor="#888888" />
        <Button Text="Scan Barcode"
                Clicked="OnScanClicked"
                BackgroundColor="#007ACC"
                TextColor="White"
                CornerRadius="8"
                HeightRequest="50" />
        <Button Text="Load from Gallery"
                Clicked="OnPickFromGalleryClicked"
                BackgroundColor="#5C5C5C"
                TextColor="White"
                CornerRadius="8"
                HeightRequest="50" />
    </VerticalStackLayout>
</ContentPage>
XML

このレイアウトでは、カメラで新しい写真を撮影する操作と、ギャラリーから既存の画像を選択する操作の2つのスキャンパスが提供されます。 これは、ユーザーが事前にバーコードを撮影したり、電子メールで画像を受信したりするワークフローにおいて重要となる。 FormatLabel は、検出されたバーコード形式とデコードされた値を同時に表示します。これは、デバッグやユーザーによる確認の際に役立ちます。

スキャンステータスフィードバックの追加

より洗練されたユーザーエクスペリエンスを実現するには、スキャンボタンをActivityIndicatorで囲み、処理中はそれを表示することを検討してください。 IronBarcode の非同期 API を使用すると、これは簡単に行えます。BarcodeReader.ReadAsync を呼び出す前に IsRunning = true を設定し、finally ブロックでリセットできます。

バーコードリーダー機能はどのように実装しますか?

MainPage.xaml.cs にコアスキャンロジックを実装します。 以下のコードは、適切な非同期パターンとエラー処理を用いて、カメラのキャプチャとギャラリーの選択の両方を処理します。

using IronBarCode;
using IronSoftware.Drawing;

namespace BarcodeScannerApp;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private async void OnScanClicked(object sender, EventArgs e)
    {
        await ScanFromSource(() => MediaPicker.Default.CapturePhotoAsync());
    }

    private async void OnPickFromGalleryClicked(object sender, EventArgs e)
    {
        await ScanFromSource(() => MediaPicker.Default.PickPhotoAsync());
    }

    private async Task ScanFromSource(Func<Task<FileResult?>> sourceFunc)
    {
        try
        {
            var photo = await sourceFunc();
            if (photo is null) return;

            using var stream = await photo.OpenReadAsync();
            using var memoryStream = new MemoryStream();
            await stream.CopyToAsync(memoryStream);
            var imageBytes = memoryStream.ToArray();

            // Show the captured image in the UI
            CapturedImage.Source = ImageSource.FromStream(() =>
                new MemoryStream(imageBytes));

            // Process with IronBarcode
            var bitmap = AnyBitmap.FromBytes(imageBytes);
            var options = new BarcodeReaderOptions
            {
                Speed = ReadingSpeed.Balanced,
                ExpectMultipleBarcodes = false
            };

            var results = await BarcodeReader.ReadAsync(bitmap, options);

            if (results.Any())
            {
                var first = results.First();
                ResultLabel.Text = $"Value: {first.Value}";
                FormatLabel.Text = $"Format: {first.BarcodeType}";
            }
            else
            {
                ResultLabel.Text = "No barcode detected";
                FormatLabel.Text = string.Empty;
            }
        }
        catch (FeatureNotSupportedException)
        {
            await DisplayAlert("Unsupported",
                "Camera is not available on this device.", "OK");
        }
        catch (PermissionException)
        {
            await DisplayAlert("Permission Required",
                "Please grant camera permission in Settings.", "OK");
        }
        catch (Exception ex)
        {
            await DisplayAlert("Error",
                $"Scanning failed: {ex.Message}", "OK");
        }
    }
}
using IronBarCode;
using IronSoftware.Drawing;

namespace BarcodeScannerApp;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private async void OnScanClicked(object sender, EventArgs e)
    {
        await ScanFromSource(() => MediaPicker.Default.CapturePhotoAsync());
    }

    private async void OnPickFromGalleryClicked(object sender, EventArgs e)
    {
        await ScanFromSource(() => MediaPicker.Default.PickPhotoAsync());
    }

    private async Task ScanFromSource(Func<Task<FileResult?>> sourceFunc)
    {
        try
        {
            var photo = await sourceFunc();
            if (photo is null) return;

            using var stream = await photo.OpenReadAsync();
            using var memoryStream = new MemoryStream();
            await stream.CopyToAsync(memoryStream);
            var imageBytes = memoryStream.ToArray();

            // Show the captured image in the UI
            CapturedImage.Source = ImageSource.FromStream(() =>
                new MemoryStream(imageBytes));

            // Process with IronBarcode
            var bitmap = AnyBitmap.FromBytes(imageBytes);
            var options = new BarcodeReaderOptions
            {
                Speed = ReadingSpeed.Balanced,
                ExpectMultipleBarcodes = false
            };

            var results = await BarcodeReader.ReadAsync(bitmap, options);

            if (results.Any())
            {
                var first = results.First();
                ResultLabel.Text = $"Value: {first.Value}";
                FormatLabel.Text = $"Format: {first.BarcodeType}";
            }
            else
            {
                ResultLabel.Text = "No barcode detected";
                FormatLabel.Text = string.Empty;
            }
        }
        catch (FeatureNotSupportedException)
        {
            await DisplayAlert("Unsupported",
                "Camera is not available on this device.", "OK");
        }
        catch (PermissionException)
        {
            await DisplayAlert("Permission Required",
                "Please grant camera permission in Settings.", "OK");
        }
        catch (Exception ex)
        {
            await DisplayAlert("Error",
                $"Scanning failed: {ex.Message}", "OK");
        }
    }
}
$vbLabelText   $csharpLabel

この実装では、カメラとギャラリーのパス間で画像処理ロジックが重複しないように、共有ヘルパーメソッドを使用します。 AnyBitmap.FromBytes メソッドは、JPEG、PNG、WebP、およびその他の一般的な画像フォーマットを自動的に処理します。手動でフォーマットを検出する必要はありません。

結果オブジェクトには、他のプロパティに加えて、first.Value (デコードされた文字列)、first.BarcodeType (フォーマット列挙型)、および first.BarcodeImage (検出されたバーコード領域の切り抜き画像) が公開されます。 完全なリストについては、 BarcodeResult クラスのドキュメントを参照してください。

スキャン実装のテスト

コードが設定されていれば、標準バーコードに対してテストを行うことができます。

 IronBarcodeを使用して MAUI バーコード スキャナを作成する方法 : 図 2 - テスト バーコードの入力

スキャン後、デコードされた値が画面に表示されます。

 IronBarcodeを使用して MAUI バーコード スキャナーを作成する方法 : 図 3 - スキャンされたバーコード値

高度なスキャンオプションはどのように設定するのですか?

IronBarcode は、特定のユースケースに合わせて検出動作を微調整できる BarcodeReaderOptions オブジェクトを公開します。 これらのオプションを理解することで、アプリケーションのニーズに基づいて、速度と精度とのバランスを取ることができます。

特定のバーコードタイプを対象とする

想定されるバーコードの種類を正確に指定することで、 IronBarcodeは不要なフォーマットチェックをスキップするため、処理時間を大幅に短縮できます。

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};

var results = await BarcodeReader.ReadAsync(bitmap, options);
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};

var results = await BarcodeReader.ReadAsync(bitmap, options);
$vbLabelText   $csharpLabel

 IronBarcodeを使用して MAUI バーコード スキャナを作成する方法 : 図 4 - 同じ画像からスキャンされた複数のコード

設定"ExpectMultipleBarcodes = true"は、 IronBarcodeに対し、最初の結果が見つかった後もスキャンを継続するように指示します。これは、1枚の梱包伝票に12個ものバーコードが含まれている可能性がある倉庫のワークフローにおいて不可欠です。

読書速度オプション

ReadingSpeed 列挙型には、Balanced、および QuickScan の 4 つのレベルがあります。 バーコードが鮮明で明るい場所で大量処理を行う場合は、QuickScan を使用してください。 解像度の低いカメラ画像や部分的に破損したラベルをスキャンする場合は、Detailed または ExtremeDetail に切り替えてください。

画像補正フィルターや信頼度閾値など、 BarcodeReaderOptions の調整方法の詳細については、ドキュメントに詳細な例が記載されています。

画像補正と前処理

IronBarcodeには、回転、傾き、または照明不足のバーコードを自動的に補正する画像補正機能が内蔵されています。 また、BarcodeReaderOptions.ImageFilters を通じて前処理フィルターを手動で適用することもできます。

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Detailed,
    ImageFilters = new ImageFilterCollection
    {
        new SharpenFilter(),
        new ContrastFilter(1.2f)
    }
};
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Detailed,
    ImageFilters = new ImageFilterCollection
    {
        new SharpenFilter(),
        new ContrastFilter(1.2f)
    }
};
$vbLabelText   $csharpLabel

前処理フィルターは、アプリケーションが低品質のカメラセンサーを搭載した古いAndroidデバイスを対象とする場合や、ユーザーが倉庫や屋外環境など、最適な照明条件ではない場所でバーコードを撮影する可能性が高い場合に特に役立ちます。

よくあるトラブルシューティングのシナリオにはどのように対処しますか?

適切に設定されたMAUIバーコードスキャナーであっても、デバイス固有の動作、画像品質の問題、またはプラットフォームの制約によって問題が発生する可能性があります。

カメラが開かない

カメラが起動しない場合は、AndroidManifest.xmlInfo.plist の両方で権限が正しく宣言されていることを確認してください。 その後、ホットリロードではなく、クリーンビルドからアプリを再デプロイしてください。 Androidの場合、テストデバイスが標準以外のカメラ構成を使用しているかどうかも確認してください。複数のカメラを搭載した一部のデバイスでは、レンズを明示的に選択する必要があります。

シミュレータでは、MediaPicker.CapturePhotoAsync() はサポートされていません。 カメラ機能は必ず実機でテストしてください。エミュレーターはギャラリー選択機能(PickPhotoAsync)をサポートしており、プリロードされた画像を使った基本的なUIテストに使用できます。

スキャン精度が低い

IronBarcodeが結果を返さない、または誤った値を返す場合は、以下の調整を試してください。

  • SpeedReadingSpeed.Detailed または ExtremeDetail に増やします。
  • 画像フィルタパイプラインに SharpenFilterContrastFilter を追加します。 キャプチャ画像の解像度が720p以上であることを確認してください。解像度が低いと、データマトリックスなどの高密度フォーマットで検出漏れが発生する可能性があります。
  • バーコードの種類がマスクに含まれているかどうかを確認してください。

IronBarcodeのトラブルシューティングガイドには、フォーマット固有の問題に対する追加の診断手順が記載されています。

メモリ管理

大きなカメラ画像は、MemoryStream に読み込む際にかなりのメモリを消費します。 ストリームオブジェクトを必ず using ステートメントで破棄してください。 ユーザーが複数のアイテムを順番にスキャンする連続スキャンワークフローの場合、ガベージコレクターを待つのではなく、処理後に明示的に bitmap.Dispose() を呼び出してください。

ヒープ領域が限られているAndroidデバイスでは、スキャン対象のバーコードが鮮明でコントラストが高く、正確なデコードにフル解像度を必要としない場合は、画像をダウンサンプリングしてからIronBarcodeに渡すことを検討してください。

プラットフォーム固有のiOSの動作

iOSでは、アプリが初めてカメラのアクセス許可を要求すると、システムは一度だけダイアログを表示します。 ユーザーがそれを拒否した場合、CapturePhotoAsync への後続の呼び出しは PermissionException をスローします。 このケースを処理するには、ユーザーを"設定"に誘導します。これは、AppInfo.ShowSettingsUI() を使用して実行できます。

App Storeに提出する前に、Info.plistに存在することを確認してください。 プライバシーに関する文字列が欠落している場合、審査チームからの詳細な説明なしに自動的に却下されます。 カメラへのアクセスに関するAppleのヒューマンインターフェースガイドラインを参照して、アクセス許可要求のタイミングとメッセージングに関するベストプラクティスを確認してください。

次のステップは何ですか?

IronBarcodeで動作するMAUIバーコードスキャナーが使えるようになったので、アプリケーションの要件に応じていくつかの選択肢があります。

-バーコードの生成-- IronBarcodeには、文字列データからQRコード、Code 128ラベル、その他の形式のバーコードを作成するための バーコード生成APIが含まれています。 -バッチスキャン-- BarcodeReader.ReadAsyncExpectMultipleBarcodes = true を使用して、ループで複数の画像ファイルを処理します。 バッチスキャンの例を参照してください

  • PDF バーコード抽出-- IronBarcode は、同じ BarcodeReader クラスを使用して PDF ドキュメントに埋め込まれたバーコードを読み取ることができます。 PDF形式のバーコード読み取りに関するドキュメントをご覧ください。 -スタイル設定とブランディング- 生成されたバーコードの視覚的な出力を、色、ロゴ、注釈でカスタマイズします。 バーコードのスタイル設定オプションを参照してください -その他のIronSoftware製品-- MAUIアプリでPDF生成、OCR、スプレッドシートのサポートも必要な場合は、一貫したクロスプラットフォーム機能を提供するIron Suite全体を検討してください。

無料トライアルライセンスから始めて、評価期間中は制限なく導入できます。 生産ライセンスのオプションとボリュームディスカウントについては、 IronBarcodeの価格ページをご覧ください。 IronBarcodeのドキュメントポータルIronBarcodeのGitHubリポジトリには、追加のコード例とコミュニティサポートが掲載されています。

よくある質問

MAUIのバーコードスキャナーにIronBarcodeを使用する利点は何ですか?

IronBarcode は、イメージ レイヤーでバーコードを処理し、オフラインで動作し、30 を超える形式をサポートし、追加の構成なしで、斜めの角度や照明不足などの困難な条件に対処します。

IronBarcode は1 つの画像内の複数のバーコードを検出できますか?

はい。BarcodeReaderOptions で ExpectMultipleBarcodes = true を設定し、BarcodeReader.ReadAsync を呼び出します。IronBarcodeは検出されたすべてのバーコードを結果コレクションに返します。

MAUI で Android と iOS のカメラ権限を設定するにはどうすればよいですか?

Androidの場合は、AndroidManifest.xmlにCAMERAのuses-permission要素とuses-feature要素を追加します。iOSの場合は、Info.plistにNSCameraUsageDescriptionと人間が読める形式の説明を追加します。

IronBarcode はオフラインのバーコードスキャンをサポートしていますか?

はい。IronBarcodeは、データを外部サーバーに送信せずに、画像を完全にデバイス上で処理します。これは、プライバシーを重視するアプリケーションにとって重要です。

MAUI でIronBarcodeがサポートしているバーコード形式はどれですか?

IronBarcodeは、QRコード、Code 128、Code 39、EAN-13、UPC-A、Data Matrix、PDF417、Aztec、MaxiCodeなど、多数のコードをサポートしています。BarcodeEncodingフラグを使用して、特定のフォーマットを指定することもできます。

品質の悪い画像のスキャン精度を向上させるにはどうすればよいですか?

ReadingSpeed を Detailed または ExtremeDetail に切り替え、SharpenFilter と ContrastFilter を ImageFilters に追加し、キャプチャした画像の解像度が少なくとも 720p であることを確認します。

IronBarcode はMAUI アプリで PDF ファイルからバーコードを読み取ることができますか?

はい。IronBarcode の BarcodeReader クラスは、画像ファイルに使用されるのと同じ ReadAsync API を使用して、PDF ドキュメントに埋め込まれたバーコードを抽出できます。

カメラへのアクセスが拒否された場合、PermissionException をどのように処理すればよいですか?

try/catch ブロックで PermissionException をキャッチし、AppInfo.ShowSettingsUI() を呼び出して、ユーザーをデバイス設定に誘導し、カメラ アクセスを再度有効にできるようにします。

Jordi Bardia
ソフトウェアエンジニア
Jordiは、最も得意な言語がPython、C#、C++であり、Iron Softwareでそのスキルを発揮していない時は、ゲームプログラミングをしています。製品テスト、製品開発、研究の責任を分担し、Jordiは継続的な製品改善において多大な価値を追加しています。この多様な経験は彼を挑戦させ続け、興味を持たせており、Iron Softwareで働くことの好きな側面の一つだと言います。Jordiはフロリダ州マイアミで育ち、フロリダ大学でコンピュータサイエンスと統計学を学びました。

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね