|
|
|
@ -27,7 +27,6 @@ package io.nayuki.qrcodegen;
|
|
|
|
|
import java.util.Arrays;
|
|
|
|
|
import java.util.Collections;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Locale;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Represents an immutable square grid of black and white cells for a QR Code symbol, and
|
|
|
|
@ -51,8 +50,8 @@ public final class QrCode {
|
|
|
|
|
* @throws IllegalArgumentException if the text fails to fit in the largest version QR Code, which means it is too long
|
|
|
|
|
*/
|
|
|
|
|
public static QrCode encodeText(String text, Ecc ecl) {
|
|
|
|
|
requireNonNull(text);
|
|
|
|
|
requireNonNull(ecl);
|
|
|
|
|
Objects.requireNonNull(text);
|
|
|
|
|
Objects.requireNonNull(ecl);
|
|
|
|
|
List<QrSegment> segs = QrSegment.makeSegments(text);
|
|
|
|
|
return encodeSegments(segs, ecl);
|
|
|
|
|
}
|
|
|
|
@ -70,8 +69,8 @@ public final class QrCode {
|
|
|
|
|
* @throws IllegalArgumentException if the data fails to fit in the largest version QR Code, which means it is too long
|
|
|
|
|
*/
|
|
|
|
|
public static QrCode encodeBinary(byte[] data, Ecc ecl) {
|
|
|
|
|
requireNonNull(data);
|
|
|
|
|
requireNonNull(ecl);
|
|
|
|
|
Objects.requireNonNull(data);
|
|
|
|
|
Objects.requireNonNull(ecl);
|
|
|
|
|
QrSegment seg = QrSegment.makeBytes(data);
|
|
|
|
|
return encodeSegments(Collections.singletonList(seg), ecl);
|
|
|
|
|
}
|
|
|
|
@ -112,8 +111,8 @@ public final class QrCode {
|
|
|
|
|
* < −1 or mask > 7, or if the data is too long to fit in a QR Code at maxVersion at the ECL
|
|
|
|
|
*/
|
|
|
|
|
public static QrCode encodeSegments(List<QrSegment> segs, Ecc ecl, int minVersion, int maxVersion, int mask, boolean boostEcl) {
|
|
|
|
|
requireNonNull(segs);
|
|
|
|
|
requireNonNull(ecl);
|
|
|
|
|
Objects.requireNonNull(segs);
|
|
|
|
|
Objects.requireNonNull(ecl);
|
|
|
|
|
if (!(1 <= minVersion && minVersion <= maxVersion && maxVersion <= 40) || mask < -1 || mask > 7)
|
|
|
|
|
throw new IllegalArgumentException("Invalid value");
|
|
|
|
|
|
|
|
|
@ -201,10 +200,10 @@ public final class QrCode {
|
|
|
|
|
*/
|
|
|
|
|
public QrCode(int ver, Ecc ecl, byte[] dataCodewords, int mask) {
|
|
|
|
|
// Check arguments
|
|
|
|
|
requireNonNull(ecl);
|
|
|
|
|
Objects.requireNonNull(ecl);
|
|
|
|
|
if (ver < 1 || ver > 40 || mask < -1 || mask > 7)
|
|
|
|
|
throw new IllegalArgumentException("Value out of range");
|
|
|
|
|
requireNonNull(dataCodewords);
|
|
|
|
|
Objects.requireNonNull(dataCodewords);
|
|
|
|
|
|
|
|
|
|
// Initialize fields
|
|
|
|
|
version = ver;
|
|
|
|
@ -232,7 +231,7 @@ public final class QrCode {
|
|
|
|
|
*/
|
|
|
|
|
public QrCode(QrCode qr, int mask) {
|
|
|
|
|
// Check arguments
|
|
|
|
|
requireNonNull(qr);
|
|
|
|
|
Objects.requireNonNull(qr);
|
|
|
|
|
if (mask < -1 || mask > 7)
|
|
|
|
|
throw new IllegalArgumentException("Mask value out of range");
|
|
|
|
|
|
|
|
|
@ -435,7 +434,7 @@ public final class QrCode {
|
|
|
|
|
// Draws the given sequence of 8-bit codewords (data and error correction) onto the entire
|
|
|
|
|
// data area of this QR Code symbol. Function modules need to be marked off before this is called.
|
|
|
|
|
private void drawCodewords(byte[] data) {
|
|
|
|
|
requireNonNull(data);
|
|
|
|
|
Objects.requireNonNull(data);
|
|
|
|
|
if (data.length != getNumRawDataModules(version) / 8)
|
|
|
|
|
throw new IllegalArgumentException();
|
|
|
|
|
|
|
|
|
@ -769,7 +768,7 @@ public final class QrCode {
|
|
|
|
|
* @throws NullPointerException if the data is {@code null}
|
|
|
|
|
*/
|
|
|
|
|
public byte[] getRemainder(byte[] data) {
|
|
|
|
|
requireNonNull(data);
|
|
|
|
|
Objects.requireNonNull(data);
|
|
|
|
|
|
|
|
|
|
// Compute the remainder by performing polynomial division
|
|
|
|
|
byte[] result = new byte[coefficients.length];
|
|
|
|
@ -804,10 +803,4 @@ public final class QrCode {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static <T> T requireNonNull(T obj) {
|
|
|
|
|
if (obj == null)
|
|
|
|
|
throw new NullPointerException();
|
|
|
|
|
return obj;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|