2013-05-13 4 views
0

Я использую для своего приложения библиотеку RedLaser для сканирования штрих-кода (который, как я полагаю, построен на Zxing). Все работает нормально, в то время как в режиме сканирования сканируется любой штрих-код, который входит в представление, но я не хочу этого, я хочу, чтобы только штрих-коды, которые были выровнены в области сканирования, которые нужно учитывать, а остальные - игнорироваться.Расположение штрих-кодов во время сканирования

Приложение примера redlaser, после которого я реализовал библиотеку в своем собственном приложении, имел прямоугольник на макете активности сканирования, однако это было проигнорировано, поскольку штрих-коды с любой части экрана были отсканированы и учтены по образцу приложения.

Итог: Я хочу, чтобы мое сканирование активности сравнить расположение обнаруженного в настоящее время штрих-код и посмотреть, если он находится в пределах от «области сканирования», если это не так, то он не будет читать.

barcode scanning

Вот код для регулировки «области сканирования»:

 viewfinderView = findViewById(R.id.view_finder); 
     LayoutParams params = new LayoutParams((int)(mDisplay.getWidth() * .75f), 
       (int)(mDisplay.getHeight() * .33f)); 
     params.gravity = Gravity.CENTER; 
     viewfinderView.setLayoutParams(params); 

Следующий код не делает ничего, я просто написал ее иллюстрировать, как все работает (так как у меня нет исходных файлов для библиотеки Redlaser), например, barcodelocation.

  Set<BarcodeResult> allResults = (Set<BarcodeResult>) scanStatus.get(Status.STATUS_FOUND_BARCODES); 
      for(BarcodeResult s : allResults) 
      { 
       ArrayList<PointF> barcodelocation = s.barcodeLocation; 
       float x = barcodelocation.get(0).x; 
       float y = barcodelocation.get(0).y; 
//there will be 4 points to each scanned barcode => 8 float's/barcode 
      } 

Извините за длинный пост, но я уже давно занимаюсь этим вопросом, и я действительно застрял.

Любая помощь приветствуется!

ответ

0

удалось найти решение на сайте RedLaser: поворотный вид в прямоугольнику затем сравнивая расположение штрих-кода с помощью .contain, что:

Rect scanningArea = new Rect(viewfinderView.getLeft(), viewfinderView.getTop(), viewfinderView.getRight(), viewfinderView.getBottom()); 
if(latestResult.iterator().hasNext()) 
     { 

      boolean isInside = true; 
      ArrayList<PointF> barcodelocation = latestResult.iterator().next().barcodeLocation; 
      for (int i = 0; i < barcodelocation.size(); i++) 
      { 
       int x = (int) barcodelocation.get(i).x; 
       int y = (int) barcodelocation.get(i).y; 
       if (!scanningArea.contains(x, y)) 
       { 
        isInside = false; 
       } 
      } 
      if (isInside) 
      { 
      //do stuff here 
      } 

     } 

Я все еще работаю над несколькими вопросами, но на этот вопрос ответил сейчас. Собираюсь идти вперед и дать себе похлопывание по спине. :)

Смежные вопросы