2014-05-22 81 views
2

使用android可以在QR码图像的中间添加徽标图像吗?如何在中间创建带有徽标的QR码

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

有什么办法可以达到这个目的。

这是我的QR码生成代码:

位图myLogo = BitmapFactory.decodeResource(getResources(),R.drawable.image); 公共无效的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(); 
} 
+0

我已经更新了答案。看看 –

+0

你可以帮助AppDev。我添加了logo.but,它增加了左上角。你可以安排它在中心 – harikrishnan

+0

请检查我的答案在http://stackoverflow.com/questions/13247701/how-to-add-a-logo-to-qr-code-in-android/43197496#43197496,I已经解决了:) –

回答

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

^h ERE是图片链接,我已经拿到了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

+0

嗨,感谢您的回复。我会试一试,让你知道 – Appdev

+0

嗨对不起,我已经使用您建议的代码更新了我的代码,但得到了“令牌上的语法错误”(“ ;预计“接近”位图mergeBitmaps(位图bmp1,位图bmp2);“但我已经交叉检查两次没有任何遗漏 – Appdev

+0

可能是你缺少任何大括号,请注意,我在我的eclipse中粘贴了代码,没有任何错误。尝试复制并再次过去 –