DELPHI11 利用Android手机实现条码扫描功能

在上一篇文章中,详细说明了使用DELPHI 11在VCL和FMX模式下,如何根据文本内容生成二维码。

在此文中,我们一起来探讨一下如何通过DELPHI 11实现二维码的扫描

主要步聚说明:
1.下载ZXing库
2.安装ZXing库
3.创建实例实现扫描功能

废话不多说,直接进入主题

【下载ZXing库】
此库在GitCode网站上可以下载,但我失败了很多次才成功,而且下载以后还要稍微修改一下,我把修改后的成品重新上传了一下,地址如下:
https://download.csdn.net/download/changfenglee/89241599

【安装ZXing库】
为了照顾新人,我把安装的具体步骤也进行说明

第一步:打开DELPHI 11,并新建Packgge
在这里插入图片描述
第二步:按下图操作

在这里插入图片描述
第三步:选择下载的ZXing库路径,并按Ctrl + A进行全选,并导入
在这里插入图片描述导入成功后可以看到文件清单内容
在这里插入图片描述
第四步:点击红框位置按右键,选择安装
在这里插入图片描述

安装过程中所有提示框全部按OK就可以,直到提示安装成功,那么ZXing库就成功完成了安装
在这里插入图片描述
第五步:增加搜索路径,否则无法引用库单元
在这里插入图片描述
在这里插入图片描述
点击红框标识的文件夹图标,将下载的ZXing库文件路径加入进来后,点ADD。

重点注意:下面红框位置的每一个都要按上面的路径设定一次
在这里插入图片描述
至此为止,我们的库才算是全部安装完成,可以在DELPHI 中正常引用了
我们可以随便打开一个新的工程测试一下,点击到单元文件中,输入“ZXing”
就可以看到所有的单元提示,这说明库文件引用成功
在这里插入图片描述
【创建扫码实例】

下面我们通过一个简单的实例的来调用ZXing库,并在安卓手机上实现扫描功能

首先我们新建一个工程,并在界面上放上Image1,Memo1,Button1,CameraComponent1,大概的界面如下图所示
在这里插入图片描述
此实例功能比较简单,主要分为两个部分
1.因为要使用相机,所以要申请相机使用权限
2.打开相机,识别条码,并将条码内容显示在MEMO1中

【申请相机权限】
先设置一个变量

  private
    { Private declarations }
    fPermissionCamera: String;

并且需要引用以下单元

Uses
zxing.BarcodeFormat,
zxing.ScanManager,
zxing.ReadResult,
system.Permissions,
androidapi.Jni.Os,
androidapi.Helpers;

整个代码如下所示:

unit Unit2;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,zxing.BarcodeFormat,zxing.ScanManager,zxing.ReadResult,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo.Types,fmx.Media,system.Permissions,fmx.DialogService,fmx.Platform,
  FMX.Objects, FMX.StdCtrls, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo,androidapi.Jni.Os,androidapi.Helpers;

type
  TForm2 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Image1: TImage;
    CameraComponent1: TCameraComponent;
    procedure Button1Click(Sender: TObject);
    procedure CameraPermissionRequestResult(Sender: TObject;
      const APermissions: TClassicStringDynArray;
      const AGrantResults: TClassicPermissionStatusDynArray);
    procedure ExplainReason(Sender: TObject; const APermissions: TClassicStringDynArray;
      const APostRationaleProc: TProc);
    procedure FormCreate(Sender: TObject);
    procedure CameraComponent1SampleBufferReady(Sender: TObject;
      const ATime: TMediaTime);
  private
    { Private declarations }
    fPermissionCamera: String;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation


{$R *.fmx}


procedure TForm2.CameraPermissionRequestResult(Sender: TObject;
  const APermissions: TClassicStringDynArray;
  const AGrantResults: TClassicPermissionStatusDynArray);

begin
  if (Length(AGrantResults) = 1) and
    (AGrantResults[0] = TPermissionStatus.Granted) then
  begin
    CameraComponent1.Active := false;
    CameraComponent1.Quality := FMX.Media.TVideoCaptureQuality.HighQuality;
    CameraComponent1.Kind := FMX.Media.TCameraKind.BackCamera;
    CameraComponent1.FocusMode := FMX.Media.TFocusMode.ContinuousAutoFocus;
    CameraComponent1.Active := True;
    Memo1.Lines.Clear;
  end
  else
    TDialogService.ShowMessage('相机使用未授权,无法扫描条码')
end;


procedure TForm2.ExplainReason(Sender: TObject;
  const APermissions: TClassicStringDynArray; const APostRationaleProc: TProc);
begin

  TDialogService.ShowMessage('软件需要相机使用权限来扫描条码',
    procedure(const AResult: TModalResult)
    begin
      APostRationaleProc;
    end)

end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  fPermissionCamera := JStringToString(TJManifest_permission.JavaClass.CAMERA);
end;



procedure TForm2.CameraComponent1SampleBufferReady(Sender: TObject;
  const ATime: TMediaTime);
begin
   TThread.Synchronize(TThread.CurrentThread,
   procedure
   begin
      CameraComponent1.SampleBufferToBitmap(Image1.Bitmap, True);
   end);
end;

procedure TForm2.Button1Click(Sender: TObject);
var
   ReadResult:TReadResult;
   SCanManager:TScanManager;
begin
  PermissionsService.RequestPermissions([fPermissionCamera],
    CameraPermissionRequestResult, ExplainReason);

   SCanManager:=TScanManager.Create(TBarcodeFormat.Auto,nil);
   ReadResult:=SCanManager.Scan(Image1.Bitmap);

   if ReadResult <> nil then
   begin
      Memo1.Text:=ReadResult.text;
   end;

end;

end.

然后我们编译运行,试试功能怎么样
在这里插入图片描述
完美识别二维码,并将信息传给了MEMO1

当然这只是最简单的例子,只是演示一下如何识别条码,更多的条码处理功能,比如优化,提速等需要在后面继续。

怎么样,是不是很简单,够不够详细,有句话怎么说来的?能给新人看懂的教程才是好教程,自我陶醉结束,文章介绍结束,当然学习和分享没有结束

欲知后事如何,请听下回分解。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Delphi 11.2 是一种集成开发环境(IDE),可以用于开发跨平台的应用程序。而 Zxing 是一个开源的条码扫描库,可以用于识别不同类型的条码。 在 Delphi 11.2 中使用 Zxing 进行条码扫描,首先需要下载并导入 Zxing 的相关库文件。可以从 Zxing 的官方网站或其他开源社区获取最新版本的库文件。 接下来,在 Delphi 11.2 的项目中引用 Zxing 相关的单元,以及配置项目的编译选项和运行时权限。通过初始化并配置 Zxing 的扫描器,可以设置扫描的类型(如二维码或一维码)和其他参数。可以创建一个扫描界面,在界面上显示实时的摄像头画面,并处理扫描结果。 在条码扫描过程中,可以通过调用 Zxing 的相应函数来启动和停止扫描。当扫描成功时,可以获取到条码的内容,并进行相应的处理,如显示在界面上或进行后续的业务逻辑操作。 需要注意的是,使用 Delphi 11.2 zxing 扫描条码时,需要确保使用的设备具备摄像头功能,并授权应用程序访问摄像头。同时,也需要根据具体的业务需求,在扫描结果的处理中考虑异常情况,并进行错误处理。 总结起来,Delphi 11.2 zxing 扫描条码包括下载导入库文件、配置编译选项和运行时权限、初始化配置扫描器、创建扫描界面、启动停止扫描、处理扫描结果等步骤。 ### 回答2: Delphi是一种使用Object Pascal编程语言的集成开发环境(IDE),用于开发软件应用程序。ZXing是一种用于解码和生成各种不同类型的二维码(如QR码)和条形码的开源库。 在Delphi 11.2中使用ZXing库进行条码扫描,需要先在Delphi项目中导入ZXing库。可以通过在Delphi中的“项目”菜单中选择“引入”选项来导入库文件。 一旦导入了ZXing库,可以在Delphi中创建一个新的窗体或者添加一个按钮来使用ZXing实现条码扫描功能。可以使用以下代码来调用ZXing库的扫描方法: ```pascal uses ZXing.BarcodeFormat, ZXing.ReadResult, ZXing.ScanManager; ... procedure TForm1.Button1Click(Sender: TObject); var BarcodeFormat: TBarcodeFormat; ScanManager: TScanManager; ReadResult: TReadResult; begin BarcodeFormat := TBarcodeFormat.Auto; // 设置扫描条码格式 ScanManager := TScanManager.Create(BarcodeFormat); ReadResult := ScanManager.Scan(Imaging.BitmapFromBitmapFile('barcodeImage.jpg')); // 扫描条码图像 if ReadResult <> nil then ShowMessage('扫描结果:' + ReadResult.Text) else ShowMessage('未找到条码'); ScanManager.Free; end; ``` 以上代码首先创建一个TBarcodeFormat对象,用于设置扫描条码格式。然后创建一个TScanManager对象,并传入设置的条码格式。接下来,通过调用Scan方法并传入要扫描条码图像,可以获取到读取结果。如果读取结果不为空,则显示扫描结果的文本内容,否则显示未找到条码的消息。 需要注意的是,在使用ZXing库进行条码扫描之前,需要先安装并配置ZXing相关的库文件和依赖项。 以上就是使用Delphi 11.2和ZXing库实现条码扫描的简单示例。希望对您有所帮助! ### 回答3: Delphi 11.2是一种集成开发环境(IDE),用于编写和开发应用程序。ZXing是一个开源的条码扫描库,可用于从图像中解码和识别各种类型的条码。 要在Delphi 11.2中使用ZXing进行条码扫描,需要遵循以下步骤: 1. 首先,确保已安装并配置好Delphi 11.2开发环境。 2. 下载并添加ZXing库到您的Delphi项目中。可以从ZXing的官方网站或GitHub上获取最新的库文件。 3. 在您的Delphi项目中,创建一个新的扫描条码功能。您可以为此添加一个按钮或其他触发器。 4. 在您的扫描功能中,导入ZXing库的相关单元。这些单元通常包括zxing.read.module.pas、zxing.barcodeformat.pas和zxing.luminance.source.pas等。 5. 在扫描功能中,创建一个用于初始化和配置扫描器的实例。您可以使用TBarcodeScanManager类来实现这一点。 6. 配置扫描器的属性,例如设置扫描类型(如一维码、二维码等)和图像捕获设置(如分辨率、闪光灯等)。 7. 启动扫描器,并设置回调函数以获取扫描结果。您可以使用BarcodeScanMatrixResultHandler和BarcodeScanResultHandler等回调函数。 8. 在扫描器的回调函数中,您可以处理和解析扫描结果。您可以使用Zxing库提供的BarcodeFormat类和Result类来获取条码的内容和类型。 9. 最后,在扫描完成后,记得释放和销毁扫描器的实例。 以上是使用Delphi 11.2和ZXing扫描条码的基本流程。具体的实现细节可能会根据您的项目需求和设计而有所差异。您可以参考ZXing的文档和Delphi的相关资源来获取更详细的指导和示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值