| name | qrcode-development |
| description | What: Guia para desenvolvimento de renderizadores, payloads e funcionalidades do QRCoder.Core. When: Ao criar novos renderizadores, adicionar payloads, modificar o QRCodeGenerator, ou trabalhar com SkiaSharp. Do NOT: Não usar para testes (ver qrcode-testing), CI/CD, ou documentação isolada.
|
Contexto
QRCoder.Core é uma biblioteca cross-platform para geração de QR Codes. A arquitetura segue:
QRCodeGenerator → engine central que gera QRCodeData (matriz de bits)
AbstractQRCode → classe base para renderizadores
- Cada renderizador converte
QRCodeData em um formato de saída específico
Atuação
Novo Renderizador
- Criar classe em
QRCoder.Core/Renderers/
- Herdar de
AbstractQRCode
- Implementar
GetGraphic() com parâmetros de customização
- Manter compatibilidade cross-platform (sem System.Drawing)
- Usar SkiaSharp para renderização gráfica se necessário
Novo Payload
- Criar classe em
PayloadGenerator (arquivo existente)
- Implementar
ToString() retornando string formatada
- Seguir padrão da indústria (RFC, especificação oficial)
- Adicionar validação de inputs
Performance
- Usar
ObjectPool<QRCodeData> para reutilização de buffers
- Usar
Span<T> e System.Buffers para operações com arrays
- Evitar alocações em hot paths
Restrições
- Não usar System.Drawing (não é cross-platform)
- Manter compatibilidade com .NET Standard 2.1
- Não adicionar dependências nativas além do SkiaSharp
- XML documentation obrigatória em APIs públicas
Exemplos
var generator = new QRCodeGenerator();
var data = generator.CreateQrCode("Hello", QRCodeGenerator.ECCLevel.M);
var pngCode = new PngByteQRCode(data);
byte[] pngBytes = pngCode.GetGraphic(20);