Добавить логотип перед QR-кодом

Я делаю генератор 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();
    }
}

person user3851513    schedule 09.05.2015    source источник
comment
Вы можете добавить некоторые подробности. Возможно, как это должно выглядеть. Добавьте несколько скриншотов.   -  person mikepenz    schedule 09.05.2015
comment
Я знаю, что вашего репу недостаточно для загрузки изображения, вы можете добавить изображение с помощью tinypic.com и добавить ссылку здесь   -  person Qadir Hussain    schedule 09.05.2015
comment
посмотрите на этот проект github.com/skrymer/qrbuilder   -  person Qadir Hussain    schedule 09.05.2015
comment
@mikepenz внешний вид текущего приложения похож на этот учебник: kreativdeveloper.wordpress. com/2015/01/08/ .. и я хочу, чтобы QR-код был похож на [это изображение] (ralree.com/newblog/wp-content/uploads/2012/08/barcode-image.png)   -  person user3851513    schedule 10.05.2015


Ответы (1)


Чтобы добавить изображение поверх другого, вы можете использовать этот метод:

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> и поместить два <ImageView> внутри него.


В качестве дополнительного примечания я предполагаю, что вам также придется проверить, что изображение не перекрывает требуемые точки QR-кода, что является другой темой.

person mikepenz    schedule 10.05.2015