- private ByteMatrix renderResult(QRCode code, final int width, final int height) {
- ByteMatrix input = code.matrix();
- int inputWidth = input.width();
- int inputHeight = input.height();
- int outputWidth = Math.max(width, inputWidth);
- int outputHeight = Math.max(height, inputHeight);
-
- int multiple = Math.min(outputWidth / inputWidth, outputHeight / inputHeight);
+ private static BitMatrix renderResult(QRCode code, int width, int height) {
+ ByteMatrix input = code.getMatrix();
+ int inputWidth = input.getWidth();
+ int inputHeight = input.getHeight();
+ int qrWidth = inputWidth + (QUIET_ZONE_SIZE << 1);
+ int qrHeight = inputHeight + (QUIET_ZONE_SIZE << 1);
+ int outputWidth = Math.max(width, qrWidth);
+ int outputHeight = Math.max(height, qrHeight);
+
+ int multiple = Math.min(outputWidth / qrWidth, outputHeight / qrHeight);
+ // Padding includes both the quiet zone and the extra white pixels to accommodate the requested
+ // dimensions. For example, if input is 25x25 the QR will be 33x33 including the quiet zone.
+ // If the requested size is 200x160, the multiple will be 4, for a QR of 132x132. These will
+ // handle all the padding from 100x100 (the actual QR) up to 200x160.