Changed QrCode.getModule() in {Java, JavaScript, Python, C++} language versions to return Boolean instead of 0/1 - to match {C, Rust} language versions - and updated comments and usages.

This commit is contained in:
Project Nayuki 2017-08-31 20:39:29 +00:00
parent 6f9116dfcb
commit 9c1a25aba4
11 changed files with 32 additions and 41 deletions

View File

@ -159,11 +159,8 @@ int QrCode::getMask() const {
}
int QrCode::getModule(int x, int y) const {
if (0 <= x && x < size && 0 <= y && y < size)
return module(x, y) ? 1 : 0;
else
return 0; // Infinite white border
bool QrCode::getModule(int x, int y) const {
return 0 <= x && x < size && 0 <= y && y < size && module(x, y);
}
@ -180,7 +177,7 @@ std::string QrCode::toSvgString(int border) const {
bool head = true;
for (int y = -border; y < size + border; y++) {
for (int x = -border; x < size + border; x++) {
if (getModule(x, y) == 1) {
if (getModule(x, y)) {
if (head)
head = false;
else

View File

@ -142,10 +142,10 @@ class QrCode final {
/*
* Returns the color of the module (pixel) at the given coordinates, which is either
* 0 for white or 1 for black. The top left corner has the coordinates (x=0, y=0).
* If the given coordinates are out of bounds, then 0 (white) is returned.
* false for white or true for black. The top left corner has the coordinates (x=0, y=0).
* If the given coordinates are out of bounds, then false (white) is returned.
*/
public: int getModule(int x, int y) const;
public: bool getModule(int x, int y) const;
/*

View File

@ -168,7 +168,7 @@ static void printQr(const QrCode &qr) {
int border = 4;
for (int y = -border; y < qr.size + border; y++) {
for (int x = -border; x < qr.size + border; x++) {
std::cout << (qr.getModule(x, y) == 1 ? "##" : " ");
std::cout << (qr.getModule(x, y) ? "##" : " ");
}
std::cout << std::endl;
}

View File

@ -88,7 +88,7 @@ int main() {
std::cout << qr.version << std::endl;
for (int y = 0; y < qr.size; y++) {
for (int x = 0; x < qr.size; x++)
std::cout << qr.getModule(x, y) << std::endl;
std::cout << (qr.getModule(x, y) ? 1 : 0) << std::endl;
}
} catch (const char *msg) {

View File

@ -259,17 +259,14 @@ public final class QrCode {
/**
* Returns the color of the module (pixel) at the specified coordinates, which is either
* 0 for white or 1 for black. The top left corner has the coordinates (x=0, y=0).
* If the specified coordinates are out of bounds, then 0 (white) is returned.
* false for white or true for black. The top left corner has the coordinates (x=0, y=0).
* If the specified coordinates are out of bounds, then false (white) is returned.
* @param x the x coordinate, where 0 is the left edge and size&minus;1 is the right edge
* @param y the y coordinate, where 0 is the top edge and size&minus;1 is the bottom edge
* @return the module's color, which is either 0 (white) or 1 (black)
* @return the module's color, which is either false (white) or true (black)
*/
public int getModule(int x, int y) {
if (0 <= x && x < size && 0 <= y && y < size)
return modules[y][x] ? 1 : 0;
else
return 0; // Infinite white border
public boolean getModule(int x, int y) {
return 0 <= x && x < size && 0 <= y && y < size && modules[y][x];
}
@ -289,8 +286,8 @@ public final class QrCode {
BufferedImage result = new BufferedImage((size + border * 2) * scale, (size + border * 2) * scale, BufferedImage.TYPE_INT_RGB);
for (int y = 0; y < result.getHeight(); y++) {
for (int x = 0; x < result.getWidth(); x++) {
int val = getModule(x / scale - border, y / scale - border); // 0 or 1
result.setRGB(x, y, val == 1 ? 0x000000 : 0xFFFFFF);
boolean val = getModule(x / scale - border, y / scale - border);
result.setRGB(x, y, val ? 0x000000 : 0xFFFFFF);
}
}
return result;
@ -318,7 +315,7 @@ public final class QrCode {
boolean head = true;
for (int y = -border; y < size + border; y++) {
for (int x = -border; x < size + border; x++) {
if (getModule(x, y) == 1) {
if (getModule(x, y)) {
if (head)
head = false;
else

View File

@ -84,7 +84,7 @@ public final class QrCodeGeneratorWorker {
System.out.println(qr.version);
for (int y = 0; y < qr.size; y++) {
for (int x = 0; x < qr.size; x++)
System.out.println(qr.getModule(x, y));
System.out.println(qr.getModule(x, y) ? 1 : 0);
}
} catch (IllegalArgumentException e) {

View File

@ -35,7 +35,7 @@
* - Constructor QrCode(list<int> datacodewords, int mask, int version, QrCode.Ecc ecl)
* - Fields int version, size, mask
* - Field QrCode.Ecc errorCorrectionLevel
* - Method getModule(int x, int y) -> int
* - Method getModule(int x, int y) -> bool
* - Method drawCanvas(int scale, int border, HTMLCanvasElement canvas) -> void
* - Method toSvgString(int border) -> str
* - Enum Ecc:
@ -115,7 +115,7 @@ var qrcodegen = new function() {
} else if (initData instanceof qrcodegen.QrCode) {
for (var y = 0; y < size; y++) {
for (var x = 0; x < size; x++) {
modules[y][x] = initData.getModule(x, y) == 1;
modules[y][x] = initData.getModule(x, y);
isFunction[y][x] = initData.isFunctionModule(x, y);
}
}
@ -164,13 +164,10 @@ var qrcodegen = new function() {
/*---- Accessor methods ----*/
// (Public) Returns the color of the module (pixel) at the given coordinates, which is either
// 0 for white or 1 for black. The top left corner has the coordinates (x=0, y=0).
// If the given coordinates are out of bounds, then 0 (white) is returned.
// false for white or true for black. The top left corner has the coordinates (x=0, y=0).
// If the given coordinates are out of bounds, then false (white) is returned.
this.getModule = function(x, y) {
if (0 <= x && x < size && 0 <= y && y < size)
return modules[y][x] ? 1 : 0;
else
return 0; // Infinite white border
return 0 <= x && x < size && 0 <= y && y < size && modules[y][x];
};
// (Package-private) Tests whether the module at the given coordinates is a function module (true) or not (false).
@ -198,7 +195,7 @@ var qrcodegen = new function() {
var ctx = canvas.getContext("2d");
for (var y = -border; y < size + border; y++) {
for (var x = -border; x < size + border; x++) {
ctx.fillStyle = this.getModule(x, y) == 1 ? "#000000" : "#FFFFFF";
ctx.fillStyle = this.getModule(x, y) ? "#000000" : "#FFFFFF";
ctx.fillRect((x + border) * scale, (y + border) * scale, scale, scale);
}
}
@ -219,7 +216,7 @@ var qrcodegen = new function() {
var head = true;
for (var y = -border; y < size + border; y++) {
for (var x = -border; x < size + border; x++) {
if (this.getModule(x, y) == 1) {
if (this.getModule(x, y)) {
if (head)
head = false;
else

View File

@ -161,7 +161,7 @@ def print_qr(qrcode):
border = 4
for y in range(-border, qrcode.get_size() + border):
for x in range(-border, qrcode.get_size() + border):
print(u"\u2588 "[qrcode.get_module(x,y)] * 2, end="")
print(u"\u2588 "[1 if qrcode.get_module(x,y) else 0] * 2, end="")
print()
print()

View File

@ -66,7 +66,7 @@ def main():
print(qr.get_version())
for y in range(qr.get_size()):
for x in range(qr.get_size()):
print(qr.get_module(x, y))
print(1 if qr.get_module(x, y) else 0)
except ValueError as e:
if e.args[0] != "Data too long":

View File

@ -37,7 +37,7 @@ This module "qrcodegen", public members:
- Method get_size() -> int
- Method get_error_correction_level() -> QrCode.Ecc
- Method get_mask() -> int
- Method get_module(int x, int y) -> int
- Method get_module(int x, int y) -> bool
- Method to_svg_str(int border) -> str
- Enum Ecc:
- Constants LOW, MEDIUM, QUARTILE, HIGH
@ -226,9 +226,9 @@ class QrCode(object):
def get_module(self, x, y):
"""Returns the color of the module (pixel) at the given coordinates, which is either
0 for white or 1 for black. The top left corner has the coordinates (x=0, y=0).
If the given coordinates are out of bounds, then 0 (white) is returned."""
return 1 if ((0 <= x < self._size) and (0 <= y < self._size) and self._modules[y][x]) else 0
False for white or True for black. The top left corner has the coordinates (x=0, y=0).
If the given coordinates are out of bounds, then False (white) is returned."""
return (0 <= x < self._size) and (0 <= y < self._size) and self._modules[y][x]
# ---- Public instance methods ----
@ -241,7 +241,7 @@ class QrCode(object):
parts = []
for y in range(-border, self._size + border):
for x in range(-border, self._size + border):
if self.get_module(x, y) == 1:
if self.get_module(x, y):
parts.append("M{},{}h1v1h-1z".format(x + border, y + border))
return """<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

View File

@ -100,7 +100,7 @@ Examples:
border = 4
for y in range(-border, qr1.get_size() + border):
for x in range(-border, qr1.get_size() + border):
color = qr1.get_module(x, y) # 0 for white, 1 for black
color = qr1.get_module(x, y) # False for white, True for black
# (... paint the module onto pixels ...)
More complete set of examples: https://github.com/nayuki/QR-Code-generator/blob/master/python/qrcodegen-demo.py .