2013-05-13 2 views
0

바코드 스캐닝 용 RedLaser 라이브러리 (내 생각에 Zxing이 내장되어 있음)를 사용하고 있습니다. 스캔 모드에서는 모든 것이 바코드로 스캔되지만 원하는 것은 아닙니다. 스캐닝 영역에 정렬 된 바코드 만 고려하고 나머지는 무시하는 것이 좋습니다.바코드 스캔 중 위치

내 자신의 앱에서 라이브러리를 구현 한 이후에 rediaser 샘플 앱은 스캔 액티브 레이아웃에 직사각형을 가졌지 만 화면의 모든 부분의 바코드를 스캔하여 고려했을 때 무시되었습니다. 샘플 앱으로

결론 : 나는 나의 스캐닝 활동이 현재 검출 된 바코드의 위치를 ​​비교하고 그 다음은 읽지 않습니다 아닌 경우는의 "스캔 영역"의 범위 내에 있는지보고 싶어요.

은 다음 코드는 아무것도하지 않습니다
 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); 

, 난 그냥 모든 작동 방법을 예시하기 위해 쓴 (: 여기

barcode scanning

은 "스캔 영역"의 조정에 대한 코드입니다 barcodelocation과 같이 Redlaser 라이브러리 용 소스 파일이 없기 때문에).

  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 사이트에서 솔루션을 찾을 관리 : 난 아직도 몇 가지 문제에 일하고 있어요

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 
      } 

     } 

하지만이 질문 : 다음 그 .contain를 사용하여 바코드 위치를 비교하는 RECT로보기를 전환을 지금 대답합니다. 계속해서 나 자신에게 뒤통수를 주자. :)

관련 문제