使用ZXing.Net.Maui检测二维码后截图黑屏的技术求助
解决ZXing.Net.Maui捕获二维码图像黑屏问题
问题分析
检测到二维码后调用CaptureAsync()返回黑屏,核心原因:
- 条码检测事件触发时,相机预览帧尚未完成渲染,立即捕获会拿到未初始化的黑屏帧
BarcodesDetected事件会连续触发,多次调用捕获方法导致帧冲突
修复步骤
1. 控制条码检测触发频率
修改条码检测事件逻辑,捕获前暂停检测避免重复触发,完成后恢复检测:
private async void zxing_BarcodesDetected(object sender, BarcodeDetectionEventArgs e) { zxing.IsDetecting = false; var first = e.Results?.FirstOrDefault(); if (first is not null) { await Dispatcher.DispatchAsync(async () => { await CaptureScreenshotAsync(); zxing.IsDetecting = true; }); } else { zxing.IsDetecting = true; } }
2. 延迟捕获确保帧就绪
在捕获方法中添加短暂延迟,等待相机帧完全渲染:
private async Task CaptureScreenshotAsync() { try { await Task.Delay(100); // 等待帧就绪 var screenshot = await zxing.CaptureAsync(); if (screenshot != null) { using var stream = await screenshot.OpenReadAsync(); #if ANDROID // 适配Android 13+的MediaStore存储方式,规避权限问题 var context = Android.App.Application.Context; var contentValues = new ContentValues(); contentValues.Put(MediaStore.Images.Media.Columns.DisplayName, $"captured_qr_{DateTime.Now:yyyyMMdd_HHmmss}.png"); contentValues.Put(MediaStore.Images.Media.Columns.MimeType, "image/png"); contentValues.Put(MediaStore.Images.Media.Columns.RelativePath, Android.OS.Environment.DirectoryDcim); var uri = context.ContentResolver.Insert(MediaStore.Images.Media.ExternalContentUri, contentValues); if (uri != null) { using var fileStream = context.ContentResolver.OpenOutputStream(uri); if (fileStream != null) { await stream.CopyToAsync(fileStream); await DisplayAlert("完成", "已保存到DCIM目录", "确定"); } } #endif } } catch (Exception ex) { await DisplayAlert("错误", $"错误信息: {ex.Message}", "确定"); zxing.IsDetecting = true; // 出错后恢复检测 } }
3. 检查权限配置
在AndroidManifest.xml中添加必要权限:
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" android:maxSdkVersion="33" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
4. 确认ZXing初始化
在MauiProgram.cs中确保注册条码阅读器:
builder.UseBarcodeReader();
内容的提问来源于stack exchange,提问作者abo shereen
相关产品推荐
相关产品推荐

