Я делаю генератор QR-кода, используя библиотеку zxing для Android. Приложение работает просто отлично. Однако мне нужно добавить логотип в центр сгенерированного QR-кода. Я прочитал руководство из этого Интернета , но это не близко к тому, что я ищу.
Вот пример моего кода:
private void generateQRCode_general(String data, ImageView img) throws WriterException {
com.google.zxing.MultiFormatWriter writer = new MultiFormatWriter();
String finaldata = Uri.encode(data, "utf-8");
BitMatrix bm = writer.encode(finaldata, BarcodeFormat.CODE_128, 150, 150);
Bitmap ImageBitmap = Bitmap.createBitmap(180, 40, Config.ARGB_8888);
for (int i = 0; i < 180; i++) {//width
for (int j = 0; j < 40; j++) {//height
ImageBitmap.setPixel(i, j, bm.get(i, j) ? Color.BLACK : Color.WHITE);
}
}
if (ImageBitmap != null) {
qrcode.setImageBitmap(ImageBitmap);
} else {
Toast.makeText(getApplicationContext(), getResources().getString(R.string.userInputError),
Toast.LENGTH_SHORT).show();
}
}
Ответ 1 · mikepenz
Чтобы добавить изображение поверх другого, вы можете использовать этот метод:
public Bitmap combineImages(Bitmap top, Bitmap bottom)
{
Bitmap combined = null;
int width, height = 0;
if(top.getWidth() > bottom.getWidth()) {
width = top.getWidth() + bottom.getWidth();
height = top.getHeight();
} else {
width = bottom.getWidth() + bottom.getWidth();
height = top.getHeight();
}
combined = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas comboImage = new Canvas(combined);
comboImage.drawBitmap(top, 0f, 0f, null);
comboImage.drawBitmap(bottom, top.getWidth(), 0f, null);
return combined;
}
Это объединит два растровых изображения, и вы сможете использовать новое результирующее растровое изображение. <RelativeLayout>Images_in_Android_using_Canvas" rel="nofollow">Источник (для этого есть много других источников)
Если вам не нужно новое растровое изображение, а просто изображение поверх другого изображения, вы можете использовать <RelativeLayout> и поместить два <ImageView> внутри него.
В качестве дополнительного примечания я предполагаю, что вам также придется проверить, что изображение не перекрывает требуемые точки QR-кода, что является другой темой.