下面讲解有关二维码的生成:

先来讲解一下对应的入参所表示的意思:

创建二维码位图 (支持自定义配置和自定义样式)

param content 字符串内容 

param width 位图宽度,要求>=0(单位:px)

param height 位图高度,要求>=0(单位:px)

param character_set 字符集/字符转码格式 (支持格式:{@link CharacterSetECI })。传null时,zxing源码默认使用 "ISO-8859-1"

param error_correction 容错级别 (支持级别:{@link ErrorCorrectionLevel })。传null时,zxing源码默认使用 "L"

param margin 空白边距 (可修改,要求:整型且>=0), 传null时,zxing源码默认使用"4"。

param color_black 黑色色块的自定义颜色值

param color_white 白色色块的自定义颜色值

下面是具体的实现步骤:

1.参数合法性判断

if (width < 0 || height < 0) { // 宽和高都需要>=0

return null

}

2.设置二维码相关配置,生成BitMatrix(位矩阵)对象

val hints: Hashtable = Hashtable()

if (character_set.isNotEmpty()) {

hints[EncodeHintType.CHARACTER_SET] = character_set // 字符转码格式设置

}

if (error_correction.isNotEmpty()) {

hints[EncodeHintType.ERROR_CORRECTION] = error_correction // 容错级别设置

}

if (margin.isNotEmpty()) {

hints[EncodeHintType.MARGIN] = margin // 空白边距设置

}

val bitMatrix = QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints)

3.创建像素数组,并根据BitMatrix(位矩阵)对象为数组元素赋颜色值

val pixels = IntArray(width * height)

for (y in 0 until height) {

for (x in 0 until width) {

if (bitMatrix[x, y]) {

pixels[y * width + x] = color_black // 黑色色块像素设置

} else {

pixels[y * width + x] = color_white // 白色色块像素设置

}

}

}

4.创建Bitmap对象,根据像素数组设置Bitmap每个像素点的颜色值,之后返回Bitmap对象

val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)

bitmap.setPixels(pixels, 0, width, 0, 0, width, height)

return bitmap

最后贴上完整的代码:

fun createQRCodeBitmap(

content: String,

width: Int,

height: Int,

character_set: String = "UTF-8",

error_correction: String = "H",

margin: String = "1",

@ColorInt color_black: Int = Color.BLACK,

@ColorInt color_white: Int = Color.WHITE

): Bitmap? {

if (width < 0 || height < 0) {

return null

}

try {

val hints: Hashtable = Hashtable()

if (character_set.isNotEmpty()) {

hints[EncodeHintType.CHARACTER_SET] = character_set

}

if (error_correction.isNotEmpty()) {

hints[EncodeHintType.ERROR_CORRECTION] = error_correction

}

if (margin.isNotEmpty()) {

hints[EncodeHintType.MARGIN] = margin }

val bitMatrix = QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints)

val pixels = IntArray(width * height)

for (y in 0 until height) {

for (x in 0 until width) {

if (bitMatrix[x, y]) {

pixels[y * width + x] = color_black

} else {

pixels[y * width + x] = color_white

}

}

}

val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)

bitmap.setPixels(pixels, 0, width, 0, 0, width, height)

return bitmap

} catch (e: WriterException) {

e.printStackTrace()

}

return null

}

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: