如何在android中将标识设置到QR码的中间

时间:2015-11-13 06:14:23

标签: android bitmap qr-code

我正在使用zing库生成QR码,我使用URL,Text等生成了简单的QR码。但我的问题是如何在Qr Code中间生成带有公司徽标的QR码。

我在堆栈溢出中找到了这么多答案但是没有它们可以解决我的问题。

I want some thing like this picture

1 个答案:

答案 0 :(得分:0)

我已经为我的项目生成了(科特琳回答)

    fun CreateQRCode(qrCodeData: String) {

        try {

            val hintMap = HashMap<EncodeHintType, ErrorCorrectionLevel>()

            val width = 250
            val height = 250

            val smallestDimension = if (width < height) width else height

            hintMap[EncodeHintType.ERROR_CORRECTION] = ErrorCorrectionLevel.H

            val qrCodeWriter = QRCodeWriter()
            val bitMatrix = qrCodeWriter.encode(
                    qrCodeData,
                    BarcodeFormat.QR_CODE,
                    smallestDimension, smallestDimension) // width x height

            val pixels = IntArray(smallestDimension * smallestDimension)
            // All are 0, or black, by default
            for (y in 0 until height) {
                val offset = y * smallestDimension
                for (x in 0 until smallestDimension) {
                    //pixels[offset + x] = matrix.get(x, y) ? BLACK : WHITE;
                    pixels[offset + x] = if (bitMatrix.get(x, y))
                        ResourcesCompat.getColor(resources, R.color.colorPrimary, null)
                    else
                        Color.WHITE
                }
            }
//            var image = DataMatrixWriter.toBufferedImage(bitMatrix)
            // Load logo image
//              var overly = getOverly(LOGO);

            val bitmap = Bitmap.createBitmap(smallestDimension, smallestDimension, Bitmap.Config.ARGB_8888)
            bitmap.setPixels(pixels, 0, smallestDimension, 0, 0, smallestDimension, smallestDimension)
            //setting bitmap to image view

            val options = BitmapFactory.Options()
            options.outWidth = 250
            options.inJustDecodeBounds = false
            options.outHeight = 250

            var overlay = BitmapFactory.decodeResource(getResources(), R.mipmap.sugary_qr_icon, options);
            overlay = Bitmap.createScaledBitmap(overlay, 50, 50, true)
            val merged = mergeBitmaps(overlay, bitmap)
            var _params = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT)
            _params.addRule(Gravity.CENTER_VERTICAL)
//            ivQrCode!!.setPadding(180, 180, 180, 180)
            ivQrCode!!.layoutParams = _params;

            ivQrCode!!.setImageBitmap(merged)
            //            return bitmap;
        } catch (er: Exception) {
            if (debug)
                er.printStackTrace()
        }
    }

mergeBitmaps函数

private fun mergeBitmaps(overlay: Bitmap, bitmap: Bitmap): Bitmap {

    val height = bitmap.height
    val width = bitmap.width

    val combined = Bitmap.createBitmap(width, height, bitmap.config)
    val canvas = Canvas(combined)
    val canvasWidth = canvas.width
    val canvasHeight = canvas.height

    canvas.drawBitmap(bitmap, Matrix(), null)

    Log.e("WIDTH", canvasWidth.toString() + " " + overlay.width)

    val centreX = (canvasWidth - overlay.width) / 2
    val centreY = (canvasHeight - overlay.height) / 2
    canvas.drawBitmap(overlay, centreX.toFloat(), centreY.toFloat(), null)*/
    val bmOverlay = Bitmap.createBitmap(overlay.width, overlay.height, overlay.config);
    var canvas = Canvas(bmOverlay);
    canvas.drawBitmap(overlay, Matrix(), null);
    canvas.drawBitmap(bitmap, 0f, 0f, null);

    return bmOverlay
}