package com.greenaddress.greenbits; import android.graphics.Bitmap; import android.graphics.Color; import android.os.Parcel; import android.os.Parcelable; import com.google.zxing.WriterException; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import com.google.zxing.qrcode.encoder.ByteMatrix; import com.google.zxing.qrcode.encoder.Encoder; public class QrBitmap implements Parcelable { private static final int SCALE = 4; private final String mData; private final int mBackgroundColor; private Bitmap mQRCode; public QrBitmap(final String data, final int backgroundColor) { mData = data; mBackgroundColor = backgroundColor; } public String getData() { return mData; } public Bitmap getQRCode() { if (mQRCode == null) { final ByteMatrix matrix; try { matrix = Encoder.encode(mData, ErrorCorrectionLevel.M).getMatrix(); } catch (final WriterException e) { throw new RuntimeException(e); } final int height = matrix.getHeight() * SCALE; final int width = matrix.getWidth() * SCALE; mQRCode = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); for (int x = 0; x < width; ++x) for (int y = 0; y < height; ++y) mQRCode.setPixel(x, y, matrix.get(x / SCALE, y / SCALE) == 1 ? Color.BLACK : mBackgroundColor); } return mQRCode; } // Parcelable support private QrBitmap(final Parcel in) { mData = in.readString(); mBackgroundColor = in.readInt(); } public static final Parcelable.Creator<QrBitmap> CREATOR = new Parcelable.Creator<QrBitmap>() { public QrBitmap createFromParcel(final Parcel in) { return new QrBitmap(in); } public QrBitmap[] newArray(final int size) { return new QrBitmap[size]; } }; @Override public void writeToParcel(final Parcel dest, final int flags) { dest.writeString(mData); dest.writeInt(mBackgroundColor); } @Override public int describeContents() { return 0; } }