使用IronOcr提取拍摄图片文本时应用崩溃求助
问题修复:拍摄图片后OCR提取文本崩溃
核心问题
photopath变量仅声明未赋值,调用IronTesseract.ReadAsync()时传入空路径,直接引发崩溃- OCR结果判断逻辑顺序错误:先给
TextView赋值再检查文本是否为空,无实际意义
修复步骤及代码
- 拍摄图片后为
photopath赋值,获取图片的本地物理路径 - 调整OCR结果判断顺序,先检查文本是否为空再更新UI
- 用
using管理流资源,避免文件占用问题
修正后的完整代码:
public partial class MainPage : ContentPage { private MediaFile photo; private string photopath; public MainPage() { InitializeComponent(); } private async void CameraButton_Clicked(object sender, EventArgs e) { var cameraMediaOptions = new StoreCameraMediaOptions { DefaultCamera = CameraDevice.Rear, SaveToAlbum = true, Directory = "MyAppName", Name = null, CompressionQuality = 100 }; photo = await CrossMedia.Current.TakePhotoAsync(cameraMediaOptions); if (photo == null) return; // 为photopath赋值,获取图片的本地路径 photopath = photo.Path; // 使用using管理流,避免资源泄漏 using (var stream = photo.GetStream()) { PhotoImage.Source = ImageSource.FromStream(() => stream); } } private async void TextButton_Clicked(object sender, EventArgs e) { if (photo == null) { await DisplayAlert("Please Take Photo First", "", "OK"); return; } // 检查路径是否有效,避免空路径 if (string.IsNullOrWhiteSpace(photopath)) { TextView.Text = "Invalid Photo Path"; return; } try { var ocr = new IronTesseract(); var result = await ocr.ReadAsync(photopath); // 先判断文本是否为空,再更新UI TextView.Text = string.IsNullOrWhiteSpace(result.Text) ? "No Text Found" : result.Text; } catch (Exception ex) { // 添加异常捕获,便于排查后续问题 await DisplayAlert("Error", ex.Message, "OK"); } } }
额外注意事项
- 确保已通过NuGet安装
IronOcr和Xam.Plugin.Media依赖包 - 安卓平台需在
AndroidManifest.xml中添加相机、存储权限:<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - iOS平台需在
Info.plist中添加权限描述:<key>NSCameraUsageDescription</key> <string>Need camera access to take photos</string> <key>NSPhotoLibraryAddUsageDescription</key> <string>Need photo library access to save photos</string>
内容的提问来源于stack exchange,提问作者Abode
相关产品推荐
相关产品推荐

