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は、以下を含む幅広いフォーマットを読み取ります。
| フォーマットカテゴリ | フォーマット | 一般的な使用例 |
|---|---|---|
| 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をアクティベートしてください。 最適な場所は、アプリビルダーが実行される前のMauiProgram.csです:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
無料トライアルライセンスキーをIron Softwareのウェブサイトから取得します。トライアルキーを使用すると、開発中にすべての機能を時間制限なしで評価できますが、出力にはフルライセンスを適用するまでトライアル透かしが含まれる可能性があります。
AndroidとiOSでカメラの権限を設定するにはどうすればいいですか?
プラットフォーム固有のカメラ権限はバーコードスキャン機能に不可欠です。 各プラットフォームはそのmanifestファイルに具体的な設定が必要で、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" />
android.permission.CAMERAエントリはユーザーからの実行時許可を要求します。 uses-feature宣言は、Google Playストアに対してアプリがカメラハードウェアとオートフォーカス機能を必要とすることを通知します。 これらがなければ、Android端末は権限要求を許可しても、内部的にカメラへのアクセスをブロックしてしまう可能性があります。
Android 13以降(APIレベル33+)では、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>
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>
このレイアウトでは、カメラで新しい写真を撮影する操作と、ギャラリーから既存の画像を選択する操作の2つのスキャンパスが提供されます。 これは、ユーザーが事前にバーコードを撮影したり、電子メールで画像を受信したりするワークフローにおいて重要となる。 FormatLabelは検出されたバーコードのフォーマットとデコードされた値を表示し、デバッグやユーザー確認に役立ちます。
スキャンステータスフィードバックの追加
洗練された体験を提供するために、スキャンボタンをActivityIndicatorにラップして、処理中に表示されるようにします。 IronBarcodeの非同期APIはこれを簡単にします。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");
}
}
}
Imports IronBarCode
Imports IronSoftware.Drawing
Namespace BarcodeScannerApp
Public Partial Class MainPage
Inherits ContentPage
Public Sub New()
InitializeComponent()
End Sub
Private Async Sub OnScanClicked(sender As Object, e As EventArgs)
Await ScanFromSource(Function() MediaPicker.Default.CapturePhotoAsync())
End Sub
Private Async Sub OnPickFromGalleryClicked(sender As Object, e As EventArgs)
Await ScanFromSource(Function() MediaPicker.Default.PickPhotoAsync())
End Sub
Private Async Function ScanFromSource(sourceFunc As Func(Of Task(Of FileResult?))) As Task
Try
Dim photo = Await sourceFunc()
If photo Is Nothing Then Return
Using stream = Await photo.OpenReadAsync()
Using memoryStream = New MemoryStream()
Await stream.CopyToAsync(memoryStream)
Dim imageBytes = memoryStream.ToArray()
' Show the captured image in the UI
CapturedImage.Source = ImageSource.FromStream(Function() New MemoryStream(imageBytes))
' Process with IronBarcode
Dim bitmap = AnyBitmap.FromBytes(imageBytes)
Dim options = New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = False
}
Dim results = Await BarcodeReader.ReadAsync(bitmap, options)
If results.Any() Then
Dim first = results.First()
ResultLabel.Text = $"Value: {first.Value}"
FormatLabel.Text = $"Format: {first.BarcodeType}"
Else
ResultLabel.Text = "No barcode detected"
FormatLabel.Text = String.Empty
End If
End Using
End Using
Catch ex As FeatureNotSupportedException
Await DisplayAlert("Unsupported", "Camera is not available on this device.", "OK")
Catch ex As PermissionException
Await DisplayAlert("Permission Required", "Please grant camera permission in Settings.", "OK")
Catch ex As Exception
Await DisplayAlert("Error", $"Scanning failed: {ex.Message}", "OK")
End Try
End Function
End Class
End Namespace
この実装は共有ScanFromSourceヘルパーメソッドを使用して、カメラとギャラリーパスの間で画像処理ロジックの重複を避けます。 AnyBitmap.FromBytesメソッドは、JPEG、PNG、WebP、その他一般的な画像フォーマットを自動で処理します。手動のフォーマット検出は不要です。
結果オブジェクトは、デコードされた文字列first.BarcodeImageを他のプロパティとともに公開します。 完全なリストについては、 BarcodeResult クラスのドキュメントを参照してください。
スキャン実装のテスト
コードが設定されていれば、標準バーコードに対してテストを行うことができます。

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

高度なスキャンオプションはどのように設定するのですか?
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);
Imports System.Threading.Tasks
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128
}
Dim results = Await BarcodeReader.ReadAsync(bitmap, options)

ExpectMultipleBarcodes = trueを設定すると、最初の結果が見つかった後もスキャンを続行するようにIronBarcodeに指示します。これは1つの荷札に10以上のバーコードが含まれる可能性がある倉庫の作業フローには必須です。
読書速度オプション
QuickScanの4つのレベルを提供します。 バーコードが綺麗で明るく照らされている大量シナリオの場合は、QuickScanを使用します。 低解像度のカメラキャプチャや部分的に破損したラベルからスキャンする場合は、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)
}
};
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Detailed,
.ImageFilters = New ImageFilterCollection From {
New SharpenFilter(),
New ContrastFilter(1.2F)
}
}
前処理フィルターは、アプリケーションが低品質のカメラセンサーを搭載した古いAndroidデバイスを対象とする場合や、ユーザーが倉庫や屋外環境など、最適な照明条件ではない場所でバーコードを撮影する可能性が高い場合に特に役立ちます。
よくあるトラブルシューティングのシナリオにはどのように対処しますか?
適切に設定されたMAUIバーコードスキャナーであっても、デバイス固有の動作、画像品質の問題、またはプラットフォームの制約によって問題が発生する可能性があります。
カメラが開かない
カメラが起動しない場合は、Info.plistの両方で権限が正しく宣言されていることを確認してください。 その後、ホットリロードではなく、クリーンビルドからアプリを再デプロイしてください。 Androidの場合、テストデバイスが標準以外のカメラ構成を使用しているかどうかも確認してください。複数のカメラを搭載した一部のデバイスでは、レンズを明示的に選択する必要があります。
シミュレーター上では、MediaPicker.CapturePhotoAsync()はサポートされていません。 カメラ機能を常に実機でテストしてください。エミュレーターはギャラリー選択のPickPhotoAsyncをサポートしているため、プリロードされた画像で基本的なUIテストを行うことができます。
スキャン精度が低い
IronBarcodeが結果を返さない、または誤った値を返す場合は、以下の調整を試してください。
ExtremeDetailに増やす- 画像フィルターパイプラインに
ContrastFilterを追加する キャプチャ画像の解像度が720p以上であることを確認してください。解像度が低いと、データマトリックスなどの高密度フォーマットで検出漏れが発生する可能性があります。 - バーコードタイプが
ExpectBarcodeTypesマスクに含まれているか確認する
IronBarcodeのトラブルシューティングガイドには、フォーマット固有の問題に対する追加の診断手順が記載されています。
メモリ管理
大きなカメラ画像はMemoryStreamに読み込まれる際に大量のメモリを消費します。 常にすべてのストリームオブジェクトにusingステートメントを使用して、処分を確実に行います。 連続スキャンのワークフローで、ユーザーが複数のアイテムを順番にスキャンする場合は、ガベージコレクタを待つのではなく、処理後にbitmap.Dispose()を明示的に呼び出してください。
ヒープ領域が限られているAndroidデバイスでは、スキャン対象のバーコードが鮮明でコントラストが高く、正確なデコードにフル解像度を必要としない場合は、画像をダウンサンプリングしてからIronBarcodeに渡すことを検討してください。
プラットフォーム固有のiOSの動作
iOSでは、アプリが初めてカメラのアクセス許可を要求すると、システムは一度だけダイアログを表示します。 ユーザーが拒否した場合、PermissionExceptionをスローします。 このケースを処理するには、ユーザーをSettingsディレクトリに誘導します。これはAppInfo.ShowSettingsUI()で行うことができます。
App Storeに送信する前にInfo.plistに存在することを確認します。 プライバシーに関する文字列が欠落している場合、審査チームからの詳細な説明なしに自動的に却下されます。 カメラへのアクセスに関するAppleのヒューマンインターフェースガイドラインを参照して、アクセス許可要求のタイミングとメッセージングに関するベストプラクティスを確認してください。
次のステップは何ですか?
IronBarcodeで動作するMAUIバーコードスキャナーが使えるようになったので、アプリケーションの要件に応じていくつかの選択肢があります。
-バーコードの生成-- IronBarcodeには、文字列データからQRコード、Code 128ラベル、その他の形式のバーコードを作成するためのバーコード生成APIが含まれています。
- バッチスキャン --
ExpectMultipleBarcodes = trueを使用して複数の画像ファイルをループで処理します; バッチスキャン例を参照してください - PDFバーコード抽出 -- IronBarcodeは同じ
BarcodeReaderクラスを使用してPDF文書に埋め込まれたバーコードを読むことができます; PDF形式のバーコード読み取りに関するドキュメントをご覧ください。 -スタイル設定とブランディング- 生成されたバーコードの視覚的な出力を、色、ロゴ、注釈でカスタマイズします。 バーコードのスタイル設定オプションを参照してください - 他のIron Software製品 -- 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() を呼び出して、ユーザーをデバイス設定に誘導し、カメラ アクセスを再度有効にできるようにします。




