RAD Studio 10.3 테스트 √
필요한 컨트롤 : scEdit, scGPButton, Image, PaintBox
는 선언해야합니다 . DelphiZXIngQRCode
다운로드 주소 : https://pan.baidu.com/s/1dN_7WGAlOIGoSdJJviQoEQ
추출 코드 : 8m9c
[동시에 검색 경로를 추가해야합니다. 그런 식으로]
private
QRCodeBitmap: TBitmap;
public
procedure Update;
다음 형식의 OnCreate 이벤트 및 OnDestroy 이벤트 :
procedure TForm1.FormCreate(Sender: TObject); // 窗体创建
begin
QRCodeBitmap := TBitmap.Create; // 代码图位
Update;
end;
procedure TForm1.FormDestroy(Sender: TObject); // 窗体销毁
begin
QRCodeBitmap.Free;
end;
PaintBox의 OnPaint 이벤트 :
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
Scale: Double;
begin
PaintBox1.Canvas.Brush.Color := clRed; // 背景颜色
PaintBox1.Canvas.FillRect(Rect(0, 0, PaintBox1.Height, PaintBox1.Width)); // 填充矩形
if ((PaintBox1.Width > 0) and (PaintBox1.Height > 0)) then
begin
if PaintBox1.Width < PaintBox1.Height then
begin
Scale := PaintBox1.Width / QRCodeBitmap.Width;
end
else
begin
Scale := PaintBox1.Height / QRCodeBitmap.Height;
end;
{ StretchDraw(Rect, Jpg); }
{ Rect:是你要画的区域(你要放大就设置的大一些,缩小就设置的小一些) }
{ Jpg:是要画的东西(我这里只是用Jpg文件做例子) }
PaintBox1.Canvas.StretchDraw(Rect(0, 0, Trunc(Scale * QRCodeBitmap.Width), Trunc(Scale * QRCodeBitmap.Height)), QRCodeBitmap);
end;
end;
자체적으로 선언 된 Updata 메서드 :
procedure TForm1.Update;
var
QRCode: TDelphiZXingQRCode;
Column, Row: Integer;
begin
QRCode := TDelphiZXingQRCode.Create;
try
QRCode.Data := scEdit1.Text; // 数据
QRCode.Encoding := TQRCodeEncoding(5); // 编码方式 【qrUTF8BOM】
QRCode.QuietZone := StrToIntDef(scEdit2.Text, 1); // 边框区域
QRCodeBitmap.SetSize(QRCode.Rows, QRCode.Columns); // 设定大小
{【Row:行 ; Column:列】}
for Row := 0 to QRCode.Rows - 1 do // 循环行
begin
for Column := 0 to QRCode.Columns - 1 do // 循环列
begin
if (QRCode.IsBlack[Row, Column]) then // 判断二维码次坐标是否是黑色的
begin
QRCodeBitmap.Canvas.Pixels[Column, Row] := clGreen; // 是的就给画布画上绿色
end
else
begin
QRCodeBitmap.Canvas.Pixels[Column, Row] := clWhite; // 否则就画白色
end;
end;
end;
finally
QRCode.Free;
end;
PaintBox1.Repaint; // 重涂
end;
위의 코드에 관한 한 QR 코드를 생성 할 수 있으며 scEdit 의 OnChange 이벤트에 Update 메소드 를 추가 할 수 있습니다.
procedure TForm1.scEdit1Change(Sender: TObject);
begin
Update;
end;
다음은 PaintBox 의 내용을 로컬 에 저장하고 Image 컨트롤에 추가하는 것입니다.
procedure SaveBmpFromPaintBox(pbox: TPaintBox; fn: string);
var
bmp: TBitmap;
r: TRect;
begin
bmp := TBitmap.Create; // 创建图位
bmp.Width := pbox.Width; // 图位宽 = 盒子宽度
bmp.Height := pbox.Height; // 图位高 = 盒子高度
try
r := Rect(0, 0, pbox.Height, pbox.Width); // 矩形图的 左上右下 四边
{ 如果图象一【r1】的选取区域小于图象二【r2】中的选取区域,那么图一【r1】选取区域中的图象,
拉伸填充到图象二【r2】中的选取区域。(图象区域相同的复制不会造成图象失真,如果变大或者变小,就容易造成失真) }
bmp.Canvas.CopyRect(r, pbox.Canvas, r); { 两个 r 在上面分别用【r1、r2】表示(从左至右),中间参数为拷贝内容 }
bmp.SaveToFile(fn); // 文件保存地址
finally
FreeAndNil(bmp);
end;
end;
procedure TForm1.scGPButton2Click(Sender: TObject);
begin
SaveBmpFromPaintBox(paintbox1, 'd:\test.bmp'); // 保存到本地 【需要改成jpg或png的直接改文件的后缀即可】
Image1.Picture.LoadFromFile('d:\test.bmp'); // 本地图片展示到 Image 上
end;
여기에 질문이 있습니다.
다음 경고가 표시되는 이유를 여러분에게 묻고 싶습니다 .이 경고를 해결할 방법이 있습니까?
나중에 읽을 수 있도록 공부하는 동안 기록 된 약간의 메모.