Extracted EpcQrCodeStringFormatter
This commit is contained in:
parent
510e6bf1ce
commit
66690c4ec3
|
@ -21,6 +21,13 @@ open class EpcQrCode(
|
||||||
open val bytes: ByteArray
|
open val bytes: ByteArray
|
||||||
get() = bitmap.extractBytes()
|
get() = bitmap.extractBytes()
|
||||||
|
|
||||||
|
open val height: Int
|
||||||
|
get() = bitmap.height
|
||||||
|
|
||||||
|
open val width: Int
|
||||||
|
get() = bitmap.width
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
constructor(bitmap: Bitmap32) : this(bitmap, DefaultHeightAndWidth) // convenience constructor for languages that don't support default parameters
|
constructor(bitmap: Bitmap32) : this(bitmap, DefaultHeightAndWidth) // convenience constructor for languages that don't support default parameters
|
||||||
|
|
||||||
|
@ -35,74 +42,19 @@ open class EpcQrCode(
|
||||||
|
|
||||||
|
|
||||||
open fun qrCodeAsString(): String {
|
open fun qrCodeAsString(): String {
|
||||||
val string = StringBuilder(bitmap.height * bitmap.width)
|
return EpcQrCodeStringFormatter().asString(this)
|
||||||
|
|
||||||
for (y in 1 until bitmap.height) {
|
|
||||||
for (x in 1 until bitmap.width) {
|
|
||||||
if (isBitSet(x, y)) {
|
|
||||||
string.append("██")
|
|
||||||
} else {
|
|
||||||
string.append(" ")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
string.appendLine()
|
|
||||||
}
|
|
||||||
|
|
||||||
return string.toString()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun qrCodeAsSmallString(): String {
|
open fun qrCodeAsSmallString(): String {
|
||||||
val string = StringBuilder(bitmap.height * bitmap.width)
|
return EpcQrCodeStringFormatter().asSmallString(this)
|
||||||
|
|
||||||
for (y in 1 until bitmap.height - 1 step 2) {
|
|
||||||
for (x in 1 until bitmap.width) {
|
|
||||||
val currentRowBit = bitmap.getInt(x, y)
|
|
||||||
val nextRowBit = bitmap.getInt(x, y + 1)
|
|
||||||
|
|
||||||
if (currentRowBit == nextRowBit) {
|
|
||||||
if (isBitSet(currentRowBit)) {
|
|
||||||
string.append("█")
|
|
||||||
} else {
|
|
||||||
string.append(" ")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (isBitSet(currentRowBit)) {
|
|
||||||
string.append("▀")
|
|
||||||
} else {
|
|
||||||
string.append("▄")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
string.appendLine()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bitmap.height % 2 == 0) { // if last row is odd
|
/**
|
||||||
val y = bitmap.height - 1
|
* black = -1, white = -16777216
|
||||||
for (x in 1 until bitmap.width) {
|
*/
|
||||||
if (isBitSet(x, y)) {
|
open fun getColorCodeAt(x: Int, y: Int): Int {
|
||||||
string.append("▀")
|
return bitmap.getInt(x, y)
|
||||||
} else {
|
|
||||||
string.append(" ")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
string.appendLine()
|
|
||||||
}
|
|
||||||
|
|
||||||
return string.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
protected open fun isBitSet(x: Int, y: Int): Boolean {
|
|
||||||
val qrCodeBit = bitmap.getInt(x, y)
|
|
||||||
|
|
||||||
return isBitSet(qrCodeBit)
|
|
||||||
}
|
|
||||||
|
|
||||||
protected open fun isBitSet(qrCodeBitColorCode: Int): Boolean {
|
|
||||||
// black = -1, white = -16777216
|
|
||||||
return qrCodeBitColorCode < -1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,80 @@
|
||||||
|
package net.codinux.banking.epcqrcode
|
||||||
|
|
||||||
|
open class EpcQrCodeStringFormatter {
|
||||||
|
|
||||||
|
open fun asString(epcQrCode: EpcQrCode): String {
|
||||||
|
val height = epcQrCode.height
|
||||||
|
val width = epcQrCode.width
|
||||||
|
val string = StringBuilder(height * width)
|
||||||
|
|
||||||
|
for (y in 1 until height) {
|
||||||
|
for (x in 1 until width) {
|
||||||
|
if (isBitSet(epcQrCode, x, y)) {
|
||||||
|
string.append("██")
|
||||||
|
} else {
|
||||||
|
string.append(" ")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string.appendLine()
|
||||||
|
}
|
||||||
|
|
||||||
|
return string.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun asSmallString(epcQrCode: EpcQrCode): String {
|
||||||
|
val height = epcQrCode.height
|
||||||
|
val width = epcQrCode.width
|
||||||
|
val string = StringBuilder(height * width)
|
||||||
|
|
||||||
|
for (y in 1 until height - 1 step 2) {
|
||||||
|
for (x in 1 until width) {
|
||||||
|
val currentRowBit = epcQrCode.getColorCodeAt(x, y)
|
||||||
|
val nextRowBit = epcQrCode.getColorCodeAt(x, y + 1)
|
||||||
|
|
||||||
|
if (currentRowBit == nextRowBit) {
|
||||||
|
if (isBitSet(currentRowBit)) {
|
||||||
|
string.append("█")
|
||||||
|
} else {
|
||||||
|
string.append(" ")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (isBitSet(currentRowBit)) {
|
||||||
|
string.append("▀")
|
||||||
|
} else {
|
||||||
|
string.append("▄")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string.appendLine()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (height % 2 == 0) { // if last row is odd
|
||||||
|
val y = height - 1
|
||||||
|
for (x in 1 until width) {
|
||||||
|
if (isBitSet(epcQrCode, x, y)) {
|
||||||
|
string.append("▀")
|
||||||
|
} else {
|
||||||
|
string.append(" ")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string.appendLine()
|
||||||
|
}
|
||||||
|
|
||||||
|
return string.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
protected open fun isBitSet(epcQrCode: EpcQrCode, x: Int, y: Int): Boolean {
|
||||||
|
val qrCodeBit = epcQrCode.getColorCodeAt(x, y)
|
||||||
|
|
||||||
|
return isBitSet(qrCodeBit)
|
||||||
|
}
|
||||||
|
|
||||||
|
protected open fun isBitSet(qrCodeBitColorCode: Int): Boolean {
|
||||||
|
// black = -1, white = -16777216
|
||||||
|
return qrCodeBitColorCode < -1
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue