mirror of https://github.com/status-im/qzxing.git
continued the transition of changing all byte references from char to unsinged char => Qr Encoder
This commit is contained in:
parent
9708a0ed23
commit
983390d465
|
@ -246,7 +246,7 @@ QString QZXing::decodeImageFromFile(const QString& imageFilePath, int maxWidth,
|
||||||
// used to have a check if this image exists
|
// used to have a check if this image exists
|
||||||
// but was removed because if the image file path doesn't point to a valid image
|
// but was removed because if the image file path doesn't point to a valid image
|
||||||
// then the QImage::isNull will return true and the decoding will fail eitherway.
|
// then the QImage::isNull will return true and the decoding will fail eitherway.
|
||||||
QUrl imageUrl(imageFilePath);
|
QUrl imageUrl = QUrl::fromLocalFile(imageFilePath);
|
||||||
QImage tmpImage = QImage(imageUrl.toLocalFile());
|
QImage tmpImage = QImage(imageUrl.toLocalFile());
|
||||||
return decodeImage(tmpImage, maxWidth, maxHeight, smoothTransformation);
|
return decodeImage(tmpImage, maxWidth, maxHeight, smoothTransformation);
|
||||||
}
|
}
|
||||||
|
@ -302,7 +302,7 @@ QImage QZXing::encodeData(const QString& data)
|
||||||
try {
|
try {
|
||||||
Ref<qrcode::QRCode> barcode = qrcode::Encoder::encode(data, qrcode::ErrorCorrectionLevel::L );
|
Ref<qrcode::QRCode> barcode = qrcode::Encoder::encode(data, qrcode::ErrorCorrectionLevel::L );
|
||||||
Ref<qrcode::ByteMatrix> bytesRef = barcode->getMatrix();
|
Ref<qrcode::ByteMatrix> bytesRef = barcode->getMatrix();
|
||||||
const std::vector< std::vector <char> >& bytes = bytesRef->getArray();
|
const std::vector< std::vector <unsigned char> >& bytes = bytesRef->getArray();
|
||||||
image = QImage(bytesRef->getWidth(), bytesRef->getHeight(), QImage::Format_ARGB32);
|
image = QImage(bytesRef->getWidth(), bytesRef->getHeight(), QImage::Format_ARGB32);
|
||||||
for(int i=0; i<bytesRef->getWidth(); i++)
|
for(int i=0; i<bytesRef->getWidth(); i++)
|
||||||
for(int j=0; j<bytesRef->getHeight(); j++)
|
for(int j=0; j<bytesRef->getHeight(); j++)
|
||||||
|
@ -311,7 +311,7 @@ QImage QZXing::encodeData(const QString& data)
|
||||||
qRgb(255,255,255));
|
qRgb(255,255,255));
|
||||||
|
|
||||||
image = image.scaled(240, 240);
|
image = image.scaled(240, 240);
|
||||||
//bool success = image.save("tmp.bmp","BMP");
|
// bool success = image.save("tmp.bmp","BMP");
|
||||||
} catch (std::exception& e) {
|
} catch (std::exception& e) {
|
||||||
std::cout << "Error: " << e.what() << std::endl;
|
std::cout << "Error: " << e.what() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,32 +22,32 @@ size_t ByteMatrix::getWidth() const
|
||||||
return width_;
|
return width_;
|
||||||
}
|
}
|
||||||
|
|
||||||
signed char ByteMatrix::get(size_t x, size_t y) const
|
unsigned char ByteMatrix::get(size_t x, size_t y) const
|
||||||
{
|
{
|
||||||
return bytes_[y][x];
|
return bytes_[y][x];
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector< std::vector<char> > ByteMatrix::getArray() const
|
std::vector< std::vector<unsigned char> > ByteMatrix::getArray() const
|
||||||
{
|
{
|
||||||
return bytes_;
|
return bytes_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ByteMatrix::set(size_t x, size_t y, const char value)
|
void ByteMatrix::set(size_t x, size_t y, const unsigned char value)
|
||||||
{
|
{
|
||||||
bytes_[y][x] = value;
|
bytes_[y][x] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ByteMatrix::set(size_t x, size_t y, size_t value)
|
void ByteMatrix::set(size_t x, size_t y, size_t value)
|
||||||
{
|
{
|
||||||
bytes_[y][x] = (char) value;
|
bytes_[y][x] = (unsigned char) value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ByteMatrix::set(size_t x, size_t y, bool value)
|
void ByteMatrix::set(size_t x, size_t y, bool value)
|
||||||
{
|
{
|
||||||
bytes_[y][x] = (char) (value ? 1 : 0);
|
bytes_[y][x] = (unsigned char) (value ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ByteMatrix::clear(const char value)
|
void ByteMatrix::clear(const unsigned char value)
|
||||||
{
|
{
|
||||||
for (size_t y = 0; y < height_; y++) {
|
for (size_t y = 0; y < height_; y++) {
|
||||||
for (size_t x = 0; x < width_; x++) {
|
for (size_t x = 0; x < width_; x++) {
|
||||||
|
|
|
@ -11,7 +11,7 @@ namespace qrcode {
|
||||||
class ByteMatrix : public Counted
|
class ByteMatrix : public Counted
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
std::vector< std::vector<char> > bytes_;
|
std::vector< std::vector<unsigned char> > bytes_;
|
||||||
size_t width_;
|
size_t width_;
|
||||||
size_t height_;
|
size_t height_;
|
||||||
|
|
||||||
|
@ -21,13 +21,13 @@ public:
|
||||||
|
|
||||||
size_t getHeight() const;
|
size_t getHeight() const;
|
||||||
size_t getWidth() const;
|
size_t getWidth() const;
|
||||||
signed char get(size_t x, size_t y) const;
|
unsigned char get(size_t x, size_t y) const;
|
||||||
|
|
||||||
std::vector< std::vector<char> > getArray() const;
|
std::vector<std::vector<unsigned char> > getArray() const;
|
||||||
void set(size_t x, size_t y, const char value);
|
void set(size_t x, size_t y, const unsigned char value);
|
||||||
void set(size_t x, size_t y, size_t value);
|
void set(size_t x, size_t y, size_t value);
|
||||||
void set(size_t x, size_t y, bool value);
|
void set(size_t x, size_t y, bool value);
|
||||||
void clear(const char value);
|
void clear(const unsigned char value);
|
||||||
const std::string toString() const;
|
const std::string toString() const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -28,7 +28,7 @@ int MaskUtil::applyMaskPenaltyRule1(const ByteMatrix& matrix)
|
||||||
int MaskUtil::applyMaskPenaltyRule2(const ByteMatrix& matrix)
|
int MaskUtil::applyMaskPenaltyRule2(const ByteMatrix& matrix)
|
||||||
{
|
{
|
||||||
int penalty = 0;
|
int penalty = 0;
|
||||||
const std::vector<std::vector<char> >& array = matrix.getArray();
|
const std::vector<std::vector<unsigned char> >& array = matrix.getArray();
|
||||||
int width = matrix.getWidth();
|
int width = matrix.getWidth();
|
||||||
int height = matrix.getHeight();
|
int height = matrix.getHeight();
|
||||||
for (int y = 0; y < height - 1; y++) {
|
for (int y = 0; y < height - 1; y++) {
|
||||||
|
@ -50,12 +50,12 @@ int MaskUtil::applyMaskPenaltyRule2(const ByteMatrix& matrix)
|
||||||
int MaskUtil::applyMaskPenaltyRule3(const ByteMatrix& matrix)
|
int MaskUtil::applyMaskPenaltyRule3(const ByteMatrix& matrix)
|
||||||
{
|
{
|
||||||
int numPenalties = 0;
|
int numPenalties = 0;
|
||||||
const std::vector<std::vector<char> >& array = matrix.getArray();
|
const std::vector<std::vector<unsigned char> >& array = matrix.getArray();
|
||||||
int width = matrix.getWidth();
|
int width = matrix.getWidth();
|
||||||
int height = matrix.getHeight();
|
int height = matrix.getHeight();
|
||||||
for (int y = 0; y < height; y++) {
|
for (int y = 0; y < height; y++) {
|
||||||
for (int x = 0; x < width; x++) {
|
for (int x = 0; x < width; x++) {
|
||||||
const std::vector<char>& arrayY = array[y]; // We can at least optimize this access
|
const std::vector<unsigned char>& arrayY = array[y]; // We can at least optimize this access
|
||||||
if (x + 6 < width &&
|
if (x + 6 < width &&
|
||||||
arrayY[x] == 1 &&
|
arrayY[x] == 1 &&
|
||||||
arrayY[x + 1] == 0 &&
|
arrayY[x + 1] == 0 &&
|
||||||
|
@ -83,7 +83,7 @@ int MaskUtil::applyMaskPenaltyRule3(const ByteMatrix& matrix)
|
||||||
return numPenalties * N3;
|
return numPenalties * N3;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MaskUtil::isWhiteHorizontal(const std::vector<char>& rowArray, int from, int to)
|
bool MaskUtil::isWhiteHorizontal(const std::vector<unsigned char>& rowArray, int from, int to)
|
||||||
{
|
{
|
||||||
for (int i = from; i < to; i++) {
|
for (int i = from; i < to; i++) {
|
||||||
if (i >= 0 && i < rowArray.size() && rowArray[i] == 1) {
|
if (i >= 0 && i < rowArray.size() && rowArray[i] == 1) {
|
||||||
|
@ -93,7 +93,7 @@ bool MaskUtil::isWhiteHorizontal(const std::vector<char>& rowArray, int from, in
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MaskUtil::isWhiteVertical(const std::vector<std::vector<char> >& array, int col, int from, int to)
|
bool MaskUtil::isWhiteVertical(const std::vector<std::vector<unsigned char> > &array, int col, int from, int to)
|
||||||
{
|
{
|
||||||
for (int i = from; i < to; i++) {
|
for (int i = from; i < to; i++) {
|
||||||
if (i >= 0 && i < array.size() && array[i][col] == 1) {
|
if (i >= 0 && i < array.size() && array[i][col] == 1) {
|
||||||
|
@ -110,11 +110,11 @@ bool MaskUtil::isWhiteVertical(const std::vector<std::vector<char> >& array, int
|
||||||
int MaskUtil::applyMaskPenaltyRule4(const ByteMatrix& matrix)
|
int MaskUtil::applyMaskPenaltyRule4(const ByteMatrix& matrix)
|
||||||
{
|
{
|
||||||
int numDarkCells = 0;
|
int numDarkCells = 0;
|
||||||
const std::vector<std::vector<char> >& array = matrix.getArray();
|
const std::vector<std::vector<unsigned char> >& array = matrix.getArray();
|
||||||
int width = matrix.getWidth();
|
int width = matrix.getWidth();
|
||||||
int height = matrix.getHeight();
|
int height = matrix.getHeight();
|
||||||
for (int y = 0; y < height; y++) {
|
for (int y = 0; y < height; y++) {
|
||||||
const std::vector<char>& arrayY = array[y];
|
const std::vector<unsigned char>& arrayY = array[y];
|
||||||
for (size_t x = 0; x < width; x++) {
|
for (size_t x = 0; x < width; x++) {
|
||||||
if (arrayY[x] == 1) {
|
if (arrayY[x] == 1) {
|
||||||
numDarkCells++;
|
numDarkCells++;
|
||||||
|
@ -177,7 +177,7 @@ int MaskUtil::applyMaskPenaltyRule1Internal(const ByteMatrix& matrix, bool isHor
|
||||||
int penalty = 0;
|
int penalty = 0;
|
||||||
int iLimit = isHorizontal ? matrix.getHeight() : matrix.getWidth();
|
int iLimit = isHorizontal ? matrix.getHeight() : matrix.getWidth();
|
||||||
int jLimit = isHorizontal ? matrix.getWidth() : matrix.getHeight();
|
int jLimit = isHorizontal ? matrix.getWidth() : matrix.getHeight();
|
||||||
const std::vector<std::vector<char> >& array = matrix.getArray();
|
const std::vector<std::vector<unsigned char> >& array = matrix.getArray();
|
||||||
for (size_t i = 0; i < iLimit; i++) {
|
for (size_t i = 0; i < iLimit; i++) {
|
||||||
int numSameBitCells = 0;
|
int numSameBitCells = 0;
|
||||||
int prevBit = -1;
|
int prevBit = -1;
|
||||||
|
|
|
@ -15,9 +15,9 @@ private:
|
||||||
static const int N3;
|
static const int N3;
|
||||||
static const int N4;
|
static const int N4;
|
||||||
|
|
||||||
static bool isWhiteHorizontal(const std::vector<char>& rowArray, int from, int to);
|
static bool isWhiteHorizontal(const std::vector<unsigned char>& rowArray, int from, int to);
|
||||||
|
|
||||||
static bool isWhiteVertical(const std::vector<std::vector<char> >& array, int col, int from, int to);
|
static bool isWhiteVertical(const std::vector<std::vector<unsigned char> >& array, int col, int from, int to);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function for applyMaskPenaltyRule1. We need this for doing this calculation in both
|
* Helper function for applyMaskPenaltyRule1. We need this for doing this calculation in both
|
||||||
|
|
|
@ -290,11 +290,11 @@ void MatrixUtil::embedTimingPatterns(ByteMatrix& matrix)
|
||||||
int bit = (i + 1) % 2;
|
int bit = (i + 1) % 2;
|
||||||
// Horizontal line.
|
// Horizontal line.
|
||||||
if (isEmpty(matrix.get(i, 6))) {
|
if (isEmpty(matrix.get(i, 6))) {
|
||||||
matrix.set(i, 6, (char)bit);
|
matrix.set(i, 6, (unsigned char)bit);
|
||||||
}
|
}
|
||||||
// Vertical line.
|
// Vertical line.
|
||||||
if (isEmpty(matrix.get(6, i))) {
|
if (isEmpty(matrix.get(6, i))) {
|
||||||
matrix.set(6, i, (char)bit);
|
matrix.set(6, i, (unsigned char)bit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -304,7 +304,7 @@ void MatrixUtil::embedDarkDotAtLeftBottomCorner(ByteMatrix& matrix)
|
||||||
if (matrix.get(8, matrix.getHeight() - 8) == 0) {
|
if (matrix.get(8, matrix.getHeight() - 8) == 0) {
|
||||||
throw new WriterException();
|
throw new WriterException();
|
||||||
}
|
}
|
||||||
matrix.set(8, matrix.getHeight() - 8, (char)1);
|
matrix.set(8, matrix.getHeight() - 8, (unsigned char)1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MatrixUtil::embedHorizontalSeparationPattern(int xStart,
|
void MatrixUtil::embedHorizontalSeparationPattern(int xStart,
|
||||||
|
@ -315,7 +315,7 @@ void MatrixUtil::embedHorizontalSeparationPattern(int xStart,
|
||||||
if (!isEmpty(matrix.get(xStart + x, yStart))) {
|
if (!isEmpty(matrix.get(xStart + x, yStart))) {
|
||||||
throw new WriterException();
|
throw new WriterException();
|
||||||
}
|
}
|
||||||
matrix.set(xStart + x, yStart, (char)0);
|
matrix.set(xStart + x, yStart, (unsigned char)0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -327,7 +327,7 @@ void MatrixUtil::embedVerticalSeparationPattern(int xStart,
|
||||||
if (!isEmpty(matrix.get(xStart, yStart + y))) {
|
if (!isEmpty(matrix.get(xStart, yStart + y))) {
|
||||||
throw new WriterException();
|
throw new WriterException();
|
||||||
}
|
}
|
||||||
matrix.set(xStart, yStart + y, (char)0);
|
matrix.set(xStart, yStart + y, (unsigned char)0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -335,7 +335,7 @@ void MatrixUtil::embedPositionAdjustmentPattern(int xStart, int yStart, ByteMatr
|
||||||
{
|
{
|
||||||
for (int y = 0; y < 5; ++y) {
|
for (int y = 0; y < 5; ++y) {
|
||||||
for (int x = 0; x < 5; ++x) {
|
for (int x = 0; x < 5; ++x) {
|
||||||
matrix.set(xStart + x, yStart + y, (char)POSITION_ADJUSTMENT_PATTERN[y][x]);
|
matrix.set(xStart + x, yStart + y, (unsigned char)POSITION_ADJUSTMENT_PATTERN[y][x]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -344,7 +344,7 @@ void MatrixUtil::embedPositionDetectionPattern(int xStart, int yStart, ByteMatri
|
||||||
{
|
{
|
||||||
for (int y = 0; y < 7; ++y) {
|
for (int y = 0; y < 7; ++y) {
|
||||||
for (int x = 0; x < 7; ++x) {
|
for (int x = 0; x < 7; ++x) {
|
||||||
matrix.set(xStart + x, yStart + y, (char)POSITION_DETECTION_PATTERN[y][x]);
|
matrix.set(xStart + x, yStart + y, (unsigned char)POSITION_DETECTION_PATTERN[y][x]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue