delphi android 实例,Delphi xe7 FireMonkey / Mobile (Android, iOS)生成 QR Code完整实例

这段Delphi代码演示了如何使用TDelphiZXingQRCode组件创建和显示二维码。程序首先设置二维码的数据、编码方式和静默区大小,然后根据图像控件的大小和WrapMode调整二维码的像素大小,最后将二维码绘制到图像上。
摘要由CSDN通过智能技术生成

1 unitUnit3;2

3 interface

4

5 uses

6 System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7 FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects,8 FMX.Controls.Presentation, FMX.Edit, FMX.StdCtrls,DelphiZXingQRCode,9 FMX.ListBox,system.math;10

11 type

12 TForm3 = class(TForm)13 Button1: TButton;14 edtText: TEdit;15 imgQRCode: TImage;16 cmbEncoding: TComboBox;17 edtQuietZone: TEdit;18 procedureButton1Click(Sender: TObject);19 private

20 {Private declarations}

21 BMP: TBitmap;22 public

23 {Public declarations}

24 end;25

26 var

27 Form3: TForm3;28

29 implementation

30

31 {$R *.fmx}

32

33 procedureTForm3.Button1Click(Sender: TObject);34 const

35 downsizeQuality: Integer = 2; //bigger value, better quality, slower rendering

36 var

37 QRCode: TDelphiZXingQRCode;38 Row, Column: Integer;39 pixelColor : TAlphaColor;40 vBitMapData : TBitmapData;41 pixelCount, y, x: Integer;42 columnPixel, rowPixel: Integer;43 functionGetPixelCount(AWidth, AHeight: Single): Integer;44 begin

45 if QRCode.Rows > 0 then

46 Result := Trunc(Min(AWidth, AHeight)) divQRCode.Rows47 else

48 Result := 0;49 end;50 begin

51 QRCode :=TDelphiZXingQRCode.Create;52 try

53 QRCode.Data :=edtText.Text;54 QRCode.Encoding :=TQRCodeEncoding(cmbEncoding.ItemIndex);55 QRCode.QuietZone := StrToIntDef(edtQuietZone.Text, 4);56 pixelCount :=GetPixelCount(imgQRCode.Width, imgQRCode.Height);57 case imgQRCode.WrapMode of

58 TImageWrapMode.iwOriginal,TImageWrapMode.iwTile,TImageWrapMode.iwCenter:59 begin

60 if pixelCount > 0 then

61 imgQRCode.Bitmap.SetSize(QRCode.Columns *pixelCount,62 QRCode.Rows *pixelCount);63 end;64 TImageWrapMode.iwFit:65 begin

66 if pixelCount > 0 then

67 begin

68 imgQRCode.Bitmap.SetSize(QRCode.Columns * pixelCount *downsizeQuality,69 QRCode.Rows * pixelCount *downsizeQuality);70 pixelCount := pixelCount *downsizeQuality;71 end;72 end;73 TImageWrapMode.iwStretch:74 raise Exception.Create(‘Not a good idea to stretch the QR Code‘);75 end;76 if imgQRCode.Bitmap.Canvas.BeginScene then

77 begin

78 try

79 imgQRCode.Bitmap.Canvas.Clear(TAlphaColors.White);80 if pixelCount > 0 then

81 begin

82 if imgQRCode.Bitmap.Map(TMapAccess.maWrite, vBitMapData) then

83 begin

84 try

85 for Row := 0 to QRCode.Rows - 1 do

86 begin

87 for Column := 0 to QRCode.Columns - 1 do

88 begin

89 if (QRCode.IsBlack[Row, Column]) then

90 pixelColor :=TAlphaColors.Black91 else

92 pixelColor :=TAlphaColors.White;93 columnPixel := Column *pixelCount;94 rowPixel := Row *pixelCount;95 for x := 0 to pixelCount - 1 do

96 for y := 0 to pixelCount - 1 do

97 vBitMapData.SetPixel(columnPixel +x,98 rowPixel +y, pixelColor);99 end;100 end;101 finally

102 imgQRCode.Bitmap.Unmap(vBitMapData);103 end;104 end;105 end;106 finally

107 imgQRCode.Bitmap.Canvas.EndScene;108 end;109 end;110 finally

111 QRCode.Free;112 end;113 end;114

115 end.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值