如何在中间创建带有徽标的QR码

时间:2014-05-22 06:35:29

标签: android qr-code

可以使用android?

在QR码图像的中间添加徽标图像

我已经生成了QR码,但现在需要在QRcode中间插入徽标图像。

有没有办法实现这一目标。

这是我的QR码生成代码:

Bitmap myLogo = BitmapFactory.decodeResource(getResources(),R.drawable.image);     public void onClick(查看v){

EditText qrInput = (EditText) findViewById(R.id.qrInput);
String qrInputText = qrInput.getText().toString();
Log.v(LOG_TAG, qrInputText);

//Find screen size
WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
Point point = new Point();
// display.getSize(point);
int width = point.x;
int height = point.y;
int smallerDimension = width < height ? width : height;
smallerDimension = smallerDimension * 3/4;

//Encode with a QR Code image
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrInputText,null,Contents.Type.TEXT,BarcodeFormat.QR_CODE.toString(),smallerDimension);

try {
Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
ImageView myImage = (ImageView) findViewById(R.id.imageView1);
myImage.setImageBitmap(bitmap);

} catch (WriterException e) {
e.printStackTrace();
}

}

我不知道有人可以指导我前进。

提前感谢帮助我们的心。

这是我实施的方式:

Bitmap myLogo = BitmapFactory.decodeResource(getResources(), R.drawable.image);
public void onClick(View v) {

// switch (v.getId()) {
// case R.id.button1:
EditText qrInput = (EditText) findViewById(R.id.qrInput);
String qrInputText = qrInput.getText().toString();
Log.v(LOG_TAG, qrInputText);

//Find screen size
WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
Point point = new Point();
// display.getSize(point);
int width = point.x;
int height = point.y;
int smallerDimension = width < height ? width : height;
smallerDimension = smallerDimension * 3/4;

//Encode with a QR Code image
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrInputText,
null,
Contents.Type.TEXT,
BarcodeFormat.QR_CODE.toString(),
smallerDimension);



try {
Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();


Bitmap mergeBitmaps(Bitmap bmp1; Bitmap bmp2)
{
Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig());
Canvas canvas = new Canvas(bmOverlay);
canvas.drawBitmap(bmp1, new Matrix(), null);
canvas.drawBitmap(bmp2, 0, 0, null);
return;
}


ImageView myImage = (ImageView) findViewById(R.id.imageView1);
myImage.setImageBitmap(mergeBitmaps);

} catch (WriterException e) {
e.printStackTrace();
}

1 个答案:

答案 0 :(得分:3)

您有QR码的位图吗?右

现在创建徽标的其他位图。

如果您的徽标位于drawable-xxx文件夹中,则使用下面的代码将您的drawable转换为位图。

Bitmap myLogo = BitmapFactory.decodeResource(getResources(), R.drawable.myLogo);

现在你有2个位图图像。使用下面的代码来合并它们

public static Bitmap mergeBitmaps(Bitmap bmp1, Bitmap bmp2) {
        Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig());
        Canvas canvas = new Canvas(bmOverlay);
        canvas.drawBitmap(bmp1, new Matrix(), null);
        canvas.drawBitmap(bmp2, 0, 0, null);
        return bmOverlay;
    }

之后。将位图设置为图像视图

希望这有帮助

<强>更新

查看下面的代码。我已经在这个

上做了一个示例项目
package com.mergebitmaps;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

import com.example.mergebitmap.R;

public class MergeBitmaps extends Activity {
private Button btnMerge;
private ImageView imgTest;

private Bitmap bitLogo, bitQrCode, bitMerged;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.merge_bitmap);

    btnMerge = (Button) findViewById(R.id.button1);
    imgTest = (ImageView) findViewById(R.id.imageView1);

}

@Override
protected void onStart() {
    super.onStart();

    bitQrCode = BitmapFactory.decodeResource(getResources(),
            R.drawable.qr_code);
    bitLogo = BitmapFactory.decodeResource(getResources(),
            R.drawable.my_logo);

    btnMerge.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            bitMerged = mergeBitmaps(bitLogo, bitQrCode);
            imgTest.setImageBitmap(bitMerged);

        }
    });

}

public static Bitmap mergeBitmaps(Bitmap bmp1, Bitmap bmp2) {
    Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(),
            bmp1.getHeight(), bmp1.getConfig());
    Canvas canvas = new Canvas(bmOverlay);
    canvas.drawBitmap(bmp1, new Matrix(), null);
    canvas.drawBitmap(bmp2, 0, 0, null);
    return bmOverlay;
}

}

这是我的布局文件

<?xml version="1.0" encoding="utf-8"?>

<Button
    android:id="@+id/button1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="Button" />

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/button1"
    android:scaleType="centerInside"
    android:src="@drawable/ic_launcher" />

</RelativeLayout>

这是输出

enter image description here

这里是我获得png图像的图像链接

QR码图片链接https://cdn1.iconfinder.com/data/icons/ios7-line/512/QR_code.png

Chrome徽标图片链接http://www.html5rocks.com/static/images/tutorials/easy-hidpi/chrome2x-8bit.png