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

.NET MAUI 強力なバーコードスキャナライブラリでWindowsアプリでBarCodeをスキャンする

.NET MAUIでバーコードスキャナを動作させるために、複雑なカメラドライバや無限のパーミッションループと格闘する必要はありません。 ほとんどの開発者は"BarCode"というと、すぐにライブカメラストリームのオーバーヘッドを気にし始めます。 もっと良い方法があります。 IronBarcode .NETライブラリを使用することで、JPEGやPNGのような画像ファイルから直接バーコードをスキャンすることができ、カメラ管理の頭痛の種を完全に避けることができます。 このチュートリアルではMicrosoft Windowsに焦点を当てていますが、まったく同じコードがAndroidアプリやiOSプロジェクトでも動作します。

無料トライアルを開始してください。

バーコード スキャン用の .NET MAUI アプリはどのように作成しますか?

Visual Studio CodeまたはVisual Studioで.NET MAUIプロジェクトをセットアップするのは簡単ですが、このチュートリアルではVisual Studioを使用します。 Visual Studio 2022以降を起動し、Create a new projectを選択し、.NET MAUI Appテンプレートを選択します。 プロジェクト名を入力し、対象プラットフォームを選択します。このチュートリアルでは、Windows デプロイメントに焦点を当てます。

Scanbot SDKのようにMauiProgram.csでvarビルダー設定やカメラプレビュー設定などの複雑な初期化を必要とするソリューションとは異なり、IronBarcodeは特別な登録を必要としません。 パブリックな静的クラスMauiProgramは、デフォルトのテンプレートから変更されていないため、.NET MAUIアプリの統合は非常に簡単です。

IronBarcode NuGetパッケージをインストールするには、コマンドパレット(VS CodeではCtrl+Shift+P)を使用するか、Visual Studioのパッケージマネージャーコンソールで以下のコマンドを実行します:

Install-Package BarCode

このNuGetパッケージのインストール1つで、バーコードスキャン、マルチバーコードスキャン、QRコード認識に必要なすべてが提供されます。 最新バージョンは、しばしばパーミッションハンドラやCameraViewコントロールの設定を必要とするカメラベースのスキャナとは異なり、追加の依存関係なしにすべての主要なBarCodeフォーマットをサポートしています。

本番環境でIronBarcodeを使用するには、ライセンスキーを適用する必要があります。 MauiProgram.csまたはApp.xaml.csコンストラクタ内で設定できます:

IronBarCode.License.LicenseKey = "YOUR_IRONBARCODE_LICENSE_KEY";
IronBarCode.License.LicenseKey = "YOUR_IRONBARCODE_LICENSE_KEY";
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR_IRONBARCODE_LICENSE_KEY"
$vbLabelText   $csharpLabel

iOSとAndroidのパーミッションの処理

画像ベースの.NETライブラリを使用する主な利点の1つは、許可モデルが簡素化されていることです。 従来のカメラベースのスキャナーでは、AndroidManifest.xmlに以下のパーミッションが必要です:

  • <uses-permission android:name="android.permission.CAMERA" />とします。
  • <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />となります。

iOSやAndroid向けにビルドする場合、これらの必要なパーミッションは、完璧に処理されないと、しばしば"パーミッションが拒否されました"というエラーにつながる可能性があります。 ただし、IronBarcodeはvarイメージまたはファイルストリームからスキャンするため、アプリがファイルシステムにアクセスできることを確認するだけでよい。

MAUIバーコードスキャナに最適なインターフェースデザインは?

クリーンで機能的なインターフェースにより、ユーザーはBarCodeを含む画像ファイルを選択し、スキャン結果を表示することができます。 以下のXAMLは、.NET MAUIアプリケーションのためのシンプルで効果的なバーコードスキャナUIを作成します:

<?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="BarcodeScanner.MainPage">
    <ScrollView>
        <VerticalStackLayout Spacing="20" Padding="30">
            <Label Text="MAUI Barcode Scanner"
                   FontSize="24"
                   HorizontalOptions="Center" />
            <Button x:Name="SelectImageBtn"
                    Text="Select Image File"
                    Clicked="OnSelectImage" />
            <Image x:Name="SelectedImageDisplay"
                   HeightRequest="250" />
            <Label x:Name="ResultsLabel"
                   Text="Barcode results will display here" />
        </VerticalStackLayout>
    </ScrollView>
</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="BarcodeScanner.MainPage">
    <ScrollView>
        <VerticalStackLayout Spacing="20" Padding="30">
            <Label Text="MAUI Barcode Scanner"
                   FontSize="24"
                   HorizontalOptions="Center" />
            <Button x:Name="SelectImageBtn"
                    Text="Select Image File"
                    Clicked="OnSelectImage" />
            <Image x:Name="SelectedImageDisplay"
                   HeightRequest="250" />
            <Label x:Name="ResultsLabel"
                   Text="Barcode results will display here" />
        </VerticalStackLayout>
    </ScrollView>
</ContentPage>
$vbLabelText   $csharpLabel

このレイアウトでは、画像ファイルを選択するためのボタン、選択した画像を表示するエリア、バーコード検出結果のラベルを提供します。 デザインは、Windowsのネイティブパフォーマンスを維持しながら、すべての.NET MAUIターゲットプラットフォームで動作します。

画像ファイルから BarCode 検出を実装するには?

MainPage.xaml.csでは、async void OnAppearingのようなライフサイクルメソッドを使用して、設定を初期化したり、ユーザーが必要なファイルアクセスを提供したかどうかをチェックしたりできます。

public partial class MainPageはスキャンロジックを含んでいます。 IronBarcodeのBarcodeReader.Readメソッドは、JPEG、PNG、GIF、TIFF、BMPフォーマットのバーコードのスキャンをサポートし、バーコード検出の複雑さをすべて処理します。 これが完全な実装です:

using IronBarCode;
namespace BarcodeScanner;
public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }
    private async void OnSelectImage(object sender, EventArgs e)
    {
        try
        {
            // Open file picker for image selection
            var result = await FilePicker.PickAsync(new PickOptions
            {
                FileTypes = FilePickerFileType.Images,
                PickerTitle = "Select a barcode image"
            });
            if (result != null)
            {
                // Display the selected image
                var stream = await result.OpenReadAsync();
                SelectedImageDisplay.Source = ImageSource.FromStream(() => stream);
                // Read barcodes from the image file
                var barcodes = BarcodeReader.Read(result.FullPath);
                // Display all detected barcode values
                if (barcodes.Count > 0)
                {
                    string output = string.Join("\n",
                        barcodes.Select(b => $"{b.BarcodeType}: {b.Value}"));
                    ResultsLabel.Text = output;
                }
                else
                {
                    ResultsLabel.Text = "No barcodes detected in image";
                }
            }
        }
        catch (Exception ex)
        {
            ResultsLabel.Text = $"Error occurred: {ex.Message}";
        }
    }
}
using IronBarCode;
namespace BarcodeScanner;
public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }
    private async void OnSelectImage(object sender, EventArgs e)
    {
        try
        {
            // Open file picker for image selection
            var result = await FilePicker.PickAsync(new PickOptions
            {
                FileTypes = FilePickerFileType.Images,
                PickerTitle = "Select a barcode image"
            });
            if (result != null)
            {
                // Display the selected image
                var stream = await result.OpenReadAsync();
                SelectedImageDisplay.Source = ImageSource.FromStream(() => stream);
                // Read barcodes from the image file
                var barcodes = BarcodeReader.Read(result.FullPath);
                // Display all detected barcode values
                if (barcodes.Count > 0)
                {
                    string output = string.Join("\n",
                        barcodes.Select(b => $"{b.BarcodeType}: {b.Value}"));
                    ResultsLabel.Text = output;
                }
                else
                {
                    ResultsLabel.Text = "No barcodes detected in image";
                }
            }
        }
        catch (Exception ex)
        {
            ResultsLabel.Text = $"Error occurred: {ex.Message}";
        }
    }
}
Imports IronBarCode

Namespace BarcodeScanner
    Public Partial Class MainPage
        Inherits ContentPage

        Public Sub New()
            InitializeComponent()
        End Sub

        Private Async Sub OnSelectImage(sender As Object, e As EventArgs)
            Try
                ' Open file picker for image selection
                Dim result = Await FilePicker.PickAsync(New PickOptions With {
                    .FileTypes = FilePickerFileType.Images,
                    .PickerTitle = "Select a barcode image"
                })
                If result IsNot Nothing Then
                    ' Display the selected image
                    Dim stream = Await result.OpenReadAsync()
                    SelectedImageDisplay.Source = ImageSource.FromStream(Function() stream)
                    ' Read barcodes from the image file
                    Dim barcodes = BarcodeReader.Read(result.FullPath)
                    ' Display all detected barcode values
                    If barcodes.Count > 0 Then
                        Dim output As String = String.Join(vbCrLf, barcodes.Select(Function(b) $"{b.BarcodeType}: {b.Value}"))
                        ResultsLabel.Text = output
                    Else
                        ResultsLabel.Text = "No barcodes detected in image"
                    End If
                End If
            Catch ex As Exception
                ResultsLabel.Text = $"Error occurred: {ex.Message}"
            End Try
        End Sub
    End Class
End Namespace
$vbLabelText   $csharpLabel

出力

.NETのMAUIは、強力なバーコードスキャナライブラリを使用して、Windowsアプリケーションでバーコードをスキャンします:画像1 - スキャンされたバーコード出力

BarCodeReader.Readメソッドは、画像ファイルに存在するすべてのバーコード形式を自動的に検出し、デコードします。各結果には、バーコードの種類、値、および位置情報が含まれます。 このアプローチでは、Scanbot SDKのようなカメラベースのソリューションが必要とする、カメラのアクセス許可、AndroidやiOS固有の設定、またはBarCode検出イベントの処理が不要になります。

private async void ProcessResults(BarcodeResults barcodes)
{
    if (barcodes.Count > 0)
    {
        string msg = $"Found {barcodes.Count} barcodes.";
        // Use await DisplayAlert to show results to the user
        await DisplayAlert("Scan Success", msg, "OK");
    }
    else
    {
        await DisplayAlert("No Results", "No barcodes were found in the image.", "OK");
    }
}
private async void ProcessResults(BarcodeResults barcodes)
{
    if (barcodes.Count > 0)
    {
        string msg = $"Found {barcodes.Count} barcodes.";
        // Use await DisplayAlert to show results to the user
        await DisplayAlert("Scan Success", msg, "OK");
    }
    else
    {
        await DisplayAlert("No Results", "No barcodes were found in the image.", "OK");
    }
}
Private Async Sub ProcessResults(barcodes As BarcodeResults)
    If barcodes.Count > 0 Then
        Dim msg As String = $"Found {barcodes.Count} barcodes."
        ' Use Await DisplayAlert to show results to the user
        Await DisplayAlert("Scan Success", msg, "OK")
    Else
        Await DisplayAlert("No Results", "No barcodes were found in the image.", "OK")
    End If
End Sub
$vbLabelText   $csharpLabel

待ち受け DisplayAlert でユーザーフィードバックを提供する

モバイルまたはデスクトップ環境では、即座にフィードバックを提供することが重要です。 ラベルを更新する代わりに、スキャンが完了したらモーダルダイアログを表示するために、await DisplayAlertメソッドを使用することができます。 これにより、ユーザーは結果を理解した上で翻訳を続けることができます。

複数の BarCode をスキャンして検出オプションを設定するには?

画像ファイルに複数のバーコードが含まれている場合、IronBarcodeは自動的にすべてのバーコードを検出します。 予想されるバーコードタイプがわかっている場合にパフォーマンスを最適化するには、BarCodeReaderOptions:

using IronBarCode;
// Configure options for scanning multiple barcodes
var options = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    Speed = ReadingSpeed.Balanced
};
var barcodes = BarcodeReader.Read(imagePath, options);
// Process each detected barcode
foreach (var barcode in barcodes)
{
    Console.WriteLine($"Found: {barcode.Value}");
}
using IronBarCode;
// Configure options for scanning multiple barcodes
var options = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    Speed = ReadingSpeed.Balanced
};
var barcodes = BarcodeReader.Read(imagePath, options);
// Process each detected barcode
foreach (var barcode in barcodes)
{
    Console.WriteLine($"Found: {barcode.Value}");
}
Imports IronBarCode

' Configure options for scanning multiple barcodes
Dim options As New BarcodeReaderOptions With {
    .ExpectMultipleBarcodes = True,
    .ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128,
    .Speed = ReadingSpeed.Balanced
}
Dim barcodes = BarcodeReader.Read(imagePath, options)

' Process each detected barcode
For Each barcode In barcodes
    Console.WriteLine($"Found: {barcode.Value}")
Next
$vbLabelText   $csharpLabel

マルチバーコードスキャン出力

.NETのMAUIは、強力なバーコードスキャナライブラリを使用して、Windowsアプリケーションでバーコードをスキャンします:画像2 - 複数のバーコードをスキャンするための出力

ExpectBarcodeTypes を指定すると、関連する形式に検出を集中させることで、スキャン速度が向上します。 Speedプロパティは、正確さとパフォーマンスのバランスをとります; ReadingSpeed.Fasterは鮮明な画像に、ReadingSpeed.Detailedは回転やノイズのある難しいスキャンに使用してください。

この柔軟性により、.NET MAUI BarCodeスキャナは、商品コードを読み取る小売アプリ、出荷ラベルを処理する倉庫システム、埋め込まれたQRコードを抽出する文書ワークフローなど、多様なシナリオに適しています。

なぜ画像ベースの BarCode スキャンを選択するのですか?

画像ベースのBarCodeスキャンは、.NET MAUIスキャンバーコード開発に明確な利点を提供します。 Scanbot SDKや同様のツールがライブカメラプレビュー機能に重点を置いているのに対し、IronBarcodeのアプローチは、より分かりやすい統合、プラットフォーム間での一貫した動作、スキャンしたドキュメント、電子メールの添付ファイル、ユーザーのアップロードなど、あらゆるソースからの既存の画像ファイルを処理する機能を提供します。

AndroidとiOSのデプロイメントでは、同じコードが修正なしで動作し、カメラパーミッションやプラットフォーム固有の設定は必要ありません。

高度な機能:AR オーバーレイと画像処理の比較

いくつかのSDKは、カメラフィード内のバーコードを強調するライブARオーバーレイ(拡張現実)に焦点を当てていますが、IronBarcodeは静止画像の高速精度に焦点を当てています。 これは、ユーザーが現場でアイテムを"ライブ"でスキャンするのではなく、領収書や出荷ラベル、スクリーンショットをアップロードするようなクロスプラットフォームのアプリケーションに最適です。

ライブカメラフィードの必要性を排除することで、バッテリーの消費を抑え、モバイルARコンポーネントにありがちなUIのちらつきを回避します。

結論

IronBarcodeで.NET MAUIバーコードスキャナを構築する場合、最小限のコードで堅牢なバーコード検出機能を提供します。 画像ファイルベースのアプローチは、カメラのパーミッション、デバイス固有の設定、複雑な初期化を排除することで開発を簡素化します。 IronBarcodeがスキャンを処理する間、あなたはアプリケーションロジックに集中します。

完全なAPIドキュメントは、PDFバーコード読み取り、バッチ処理、高度な画像フィルタなどの追加機能をカバーしています。 あなたのクロスプラットフォーム.NET MAUIプロジェクトにBarCodeスキャンを実装する準備はできていますか? ライセンスを購入して本番環境で使用することも、無料トライアルで全機能を試すこともできます。

今IronBarcodeを始めましょう。
green arrow pointer

よくある質問

.NET MAUIでBarCodeスキャナを作成するには?

IronBarcode .NET ライブラリを使用することで、.NET MAUIでバーコードスキャナを作成することができます。この方法は、ライブカメラストリームを管理する複雑さを回避します。

IronBarcodeをAndroidやiOSのバーコードスキャニングに使用できますか?

はい、AndroidとiOSのプロジェクトで同じIronBarcodeコードをバーコードスキャニングに使用することができます。ライブラリはこれらのプラットフォーム間で互換性があり、シームレスな統合が可能です。

.NET MAUIアプリケーションにIronBarcodeを使用する利点は何ですか?

.NETのMAUIアプリケーションでIronBarcodeを使用すると、複雑なカメラドライバやパーミッションを処理する必要がなくなり、バーコードスキャンが簡素化されます。IronBarcodeはイメージファイルから直接スキャンすることができ、プロセスをより簡単かつ効率的にします。

.NET MAUIでBarCodeスキャン用のカメラストリームを管理するのは難しいですか?

バーコードスキャニングのための.NET MAUIでのカメラストリームの管理は、カメラドライバやパーミッションループのために複雑になることがあります。しかし、IronBarcodeを使用すると、代わりに画像ファイルからバーコードをスキャンすることで、これらの課題を回避することができます。

IronBarcodeはバーコードだけでなくQRコードのスキャンもサポートしていますか?

IronBarcodeはバーコードとQRコードのスキャンをサポートし、アプリケーションの様々なコードスキャンに対応します。

IronBarcodeはWindowsアプリケーションのみに限定されますか?

このチュートリアルではMicrosoft Windowsに焦点を当てていますが、IronBarcodeはAndroidやiOSにも対応しており、クロスプラットフォーム開発のための柔軟な選択肢となっています。

IronBarcodeはどのような画像ファイル形式のスキャンをサポートしていますか?

IronBarcodeは、JPEGやPNGを含む複数の画像ファイル形式からのスキャンをサポートしており、バーコードスキャニングの幅広いユースケースを可能にしています。

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