Ir para conteúdo
  • Cadastre-se

dev botao

Qr Code do pix (todos os bancos) gerados pelo 'PintarQRCode' no android vem com qualidade de imagem ruim.


Ver Solução Respondido por Jhonlenon Ribeiro,
  • Este tópico foi criado há 474 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado (editado)

QR Code gerado no android pelo método  'PintarQRCode' fica com uma qualidade muito ruim, opaco/desfocado acredito que tenha ligação com os pixels. 

Tem alguma configuração que melhore a qualidade da imagem?  Ou algum outro método que substitua o  'PintarQRCode' para que eu possa testar?

 

Screenshot_1.png

Editado por Alisson07
  • 3 meses depois ...
  • 4 semanas depois ...
  • Membros Pro
Postado

Boa tarde,

Eu adaptei o método de geração de QrCode, aplicando um zoom no bitmap.

Desta forma, o fator do zoom representa o fator de multiplicação dos pixels da imagem.

Se não me engano, a classe TDelphiZXingQRCode está distribuída junto ao ACBR.

procedure MontaQRCode( const ATexto: string; var pBmpQRCode: TBitmap; const pZoom: Integer = 1 );
var
     J, I, xi, xj, TJ, TI, zoom : Integer;
     objQRCode : TDelphiZXingQRCode;
     cor: TColor;
begin
     zoom := FH.SeSenao(pZoom >= 1, pZoom, 1);
     objQRCode := TDelphiZXingQRCode.Create;
     try
        objQRCode.Data      := ATexto;
        objQRCode.Encoding  := qrISO88591;
        objQRCode.QuietZone := 4;
        pBmpQRCode.SetSize(objQRCode.Rows * zoom, objQRCode.Columns * zoom);
        for I := 0 to objQRCode.Rows - 1 do
        begin
             for J := 0 to objQRCode.Columns - 1 do
             begin
                  if (objQRCode.IsBlack[I, J]) then
                     cor := clBlack
                  else
                     cor := clWhite;
                  if zoom > 1 then
                  begin
                      TI := ((I+1) * zoom);
                      for xi := 1 to zoom do
                      begin
                          Dec(TI);
                          TJ := ((J+1) * zoom);
                          for xj := 1 to zoom do
                          begin
                               Dec(TJ);
                               pBmpQRCode.Canvas.Pixels[TJ, TI] := cor;
                          end;
                      end;
                  end
                  else
                     pBmpQRCode.Canvas.Pixels[J, I] := cor
             end;
        end;
     finally
        objQRCode.free;
     end;
end;

 

Para testar:

 

procedure TFSisUtil.Button4Click(Sender: TObject);
var
  path, tx: string;
  bitmap : TBitmap;
begin
  tx := 'este é um teste de zoom de qrcode';
  bitmap := TBitmap.Create;
  try
     MontaQRCode(tx, bitmap, 4);
     path := 'c:\teste\' + FormatDateTime('ddmmyyyy.hhmmsszzzz', Now) + '.bmp';
     bitmap.SaveToFile(path);
  finally
     bitmap.Free;
  end;

end;

 

  • Curtir 1
  • Este tópico foi criado há 474 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.