Pull to refresh

Comments 7

Помню, на одном рекламном буклете был QR-код желтого цвета на бордовом фоне. Несколько подряд программ из Google Play не могли его распознать, несмотря на то, что изображение нормально фокусировалось и на вид было довольно контрастным. В одной из программ была опция «инвертировать цвета», что и помогло распознать такой код.

Я так понимаю, большинство программ использует указанную native библиотеку, которая не справилась с цветным кодом. Довольно странно допускать, что фон будет обязательно белым (светлым). Или это требования стандарта на QR-коды?
Мне кажется изобретать велосипед не стоит. Чёрный по белому самый контрастный и выигрышный вариант.
Скажите это дизайнерам, которые так наровят покреативить)
Будьте осторожны с «необычными» кодировками. Так, если в вашем QR Code не зашифрована команда переключения кодовой страницы, то байтовые блоки данных будут интерпретироваться разными читалками по-разному. По стандарту, в QR Code в случае, когда в нём не указана команда смены кодовой страницы, бинарные блоки данных должны интерпретироваться по латинской кодовой странице (привет, кракозябры). В реальности, большинство генерилок QR Code забивают болт на эту команду и шифруют всё либо в текущей кодовой странице пользователя, либо в юникоде, либо еще как-нибудь. Соответственно, многие реальные читалки QR Code точно так же забивают на стандарт и у них кодовая страница по-умолчанию также может отличаться от стандарта.
Чтобы в вашем QR Code можно было закодировать какой-то нелатинский текст в соответствии со спецификацией баркода, нужно, чтобы генератор умел вставлять команду переключения кодовой страницы (или, по-другому ECI).
Генерить и снимать коды можно только с помощью ZXing.
Примерно как-то так:

...
import com.google.zxing.Result;
import com.google.zxing.client.android.CaptureActivity;

public class QRReaderActivity extends CaptureActivity
{
	public void handleDecode(Result rawResult, Bitmap barcode)
	{
		Intent resultIntent = new Intent();
		resultIntent.putExtra("SCAN_RESULT", rawResult.getText());
		setResult(RESULT_OK, resultIntent);
		finish();
	}
}

// request activity for result 
Intent intent = new Intent(context, QRReaderActivity.class);
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);

У меня только одна проблема возникла с зеброй, а это автофокус, который она использует во время сканирования фотогравий. Но, это можно отключить.
Почему ZBar? Поделитесь опытом, пожалуйста.
У нас есть опыт использования и того и другого. В ZXing до недавнего времени не было механизма встроить его в своё приложение «целиком», т.е. ZXing-приложение тоже должно было быть установлено и для сканирования нужно было запускать чужую активити и ждать результатов. Сейчас уже есть stand-alone версия, которая позволяет добавить сразу фрагмент с видео-превью, но поддерживается только landscape-ориентация (по крайней мере так было месяц назад).
Еще одно достоинство ZBar — он сканирует гораздо быстрее. Прирост скорости очень заметен.
Скомпилировал зебру как библиотеку, добавил её, сделал свою активити, и всё работает как надо.
Sign up to leave a comment.

Articles