앱툴즈
46.♡.168.138
46.♡.168.129
46.♡.168.161
46.♡.168.136
46.♡.168.145
46.♡.168.162
46.♡.168.144
46.♡.168.140
115.♡.135.198
46.♡.168.139
 
게시물 88건
   
ZXing 바코드 스캔부분 크기 조절하기.
글쓴이 : 김병주                   날짜 : 2012-08-06 (월) 01:32 조회 : 13373
바코드 스캐너 API로 Zxing을 많이들 사용하실거에요.
 
가로모드가 기준인데다가 가로 세로 크기를 기준으로 리사이징 하고,
 
ImageView를 컨트롤 하는게아니라.
 
surfaceView에다가 투명 레이아웃을 drawRect라는것을 4개그려
 
중복되지 않는 부분을 캡처하는 방식으로 되어 있어요.
 
그래서 이부분을 수정하려면
 
총 8곳을 수정해야 되죠.
 
수정을 할곳은 ViewfinderView.java라는 파일이 있는 부분인데
 
여기서.
 ///com\google\zxing\client\android\ViewfinderView.java 입니다.
91.
 // Draw the exterior (i.e. outside the framing rect) darkened
    paint.setColor(resultBitmap != null ? resultColor : maskColor);    
    canvas.drawRect(0, 0, width, frame.top, paint);  //가로 윗선
   canvas.drawRect(0, frame.top, frame.left, frame.bottom + 1, paint); //세로 왼쪽선    canvas.drawRect(frame.right + 1, frame.top, width, frame.bottom + 1, paint); //세로 오른쪽선    canvas.drawRect(0, frame.bottom + 1, width, height, paint); //가로 아랫선
 
이부분은 화면 전체 뒷배경에 마스크를 씌우는 작업이에요.
=============
====        === 이렇게 검은색으로 칠해진 부분을 처리하는 거죠.
=============
 
canvas.drawRect(0, 0, width, frame.top, paint);
 --->> 이부분은  0,0 < 화면의 가장 최상위의 왼쪽부분을 시작으로 기준점을 잡고
                        width < 화면의 최대 가로 길이 입니다.
                        frame.top <- 이부분은 사각형의 Y좌표인데. 보통 화면 최대 Y좌표에서 50~60dp
                                          정도에 위치해 있습니다.
   이부분은 아까 위의 ================== 이부분을 채색하는겁니다.
   그리고 아래 부분은 canvas.drawRect(0, frame.top, frame.left, frame.bottom + 1, paint);
                              .left .bottom 이렇게 되어 있는데
                               left는 화면기준으로 세로의 길이를 받아옵니다.(Top과 마찬가지로 최대치에서
                               50~60dp 정도 의 위치를 기준으로 잡습니다.)
                           bottom은 y좌표에서 하단을 가리키며, 이 좌표 역시 가장 하단에서 일정수치
                            떨어져잇습니다.
              
예를들어 나는 스캔되는 부분을 가로모드 기준으로 반으로 줄이고 싶다.(가로길이를)
세로 왼쪽/오른쪽선의 위치를 안쪽으로 땡기면 되겠죠?
frame.left, frame.right가 x좌표가 되므로 이부분을 각각 /2로 줄이고 여기에 늘리고 싶은 만큼의
픽셀치를 추가합니다. /2가 되면 마스크 크기에서 반정도 줄어드는데, 이게 너무 작다고 느껴지면
+ 픽셀 값을 해주시면됩니다.
왼쪽은 -값 오른쪽은 +값입니다.
반대로 세로 크기를 수정하려면 역시 top과 bottom을 수정하시면되고
여기에도 위쪽값은 -, 아래쪽값은 +가 됩니다.
 
103.
 // Draw a two pixel solid black border inside the framing rect
      paint.setColor(frameColor);
      canvas.drawRect(frame.left, frame.top, frame.right + 1, frame.top + 2, paint);
      canvas.drawRect(frame.left, frame.top + 2, frame.left + 2, frame.bottom - 1, paint);
      canvas.drawRect(frame.right - 1, frame.top, frame.right + 1, frame.bottom - 1, paint);
      canvas.drawRect(frame.left, frame.bottom - 1, frame.right + 1, frame.bottom + 1, paint);
이부분은 안쪽의 스캔되는 영역을 설정하는건데.
zxing의 스캐너를 잘보시면 스캔되는영역 바깥쪽에 얇은 검은색 선이 있습니다.
그 선들이 바로 위의 값들이죠. 선처럼 보이지만 사실 사각형을 이어 붙힌 거죠.
각각의 선들은 위의 마스크들의 값들과 같고.값들도 역시 같습니다.
주의할점은 선의 굵기인데 크기 조절을 위해 +한다고 하셨을 때 이값들이 경계가 되는 점들에서
+1~+2정도 차이나게 해주셔야됩니다. 그렇지 않으면 상당히 굵은 선이 생기면서
그부분을 스켄하지 않게 됩니다.
 
110.
    // Draw a red "laser scanner" line through the middle to show decoding is active
      paint.setColor(laserColor);
      paint.setAlpha(SCANNER_ALPHA[scannerAlpha]);
      scannerAlpha = (scannerAlpha + 1) % SCANNER_ALPHA.length;
      int middle = frame.height() / 2 + frame.top;
      canvas.drawRect(frame.left + 2, middle - 1, frame.right - 1, middle + 2, paint);
이부분은 레이져선... 을 표현하는 부분인데 저는 필요가 없는거 같아서 빼두긴했습니다.
이부분은 화면을 기준으로 중앙값을 잡고 그 중앙값에 반짝이는 에니메이션이 들어가는
사각형을 넣습니다. ----------------------이런정도의 굵기의..  
길이변경은 위와 같습니다.
 
 
변경을 하는건 여기까지이고 레이아웃은 이 클레스를 draw 로 받아오기 때문에 따로 수정할건
없습니다.
 
그럼 즐코딩 되시길.   
* 글을 등록하실때 꼭 필요한 경우가 아니면 개인정보를 남기지 마세요 ^^ (연락처,이메일주소,주민등록번호 등)




김병주 님의 Tip&Tech 최신글 [더보기]


   

게시물 88건
번호 제목 글쓴이 날짜 조회
88  <클라우드혁신센터> 12월 1일 SW 스타트업 창업 성공 전략 세미나 참석 요청 준모 11-30 2550
87  <클라우드혁신센터> 12월 1일 SW 스타트업 창업 성공 전략 세미나 준모 11-23 2483
86  개인개발자 SW개발환경 지원사업 안내 준모 10-28 2682
85  맥에서 구글 API key 등록방법 성기동 08-29 3575
84  [Agate Mobile] 앱 설치 없이 서버로부터 실시간 로딩 되어 동작하는 Cloud Native App 프레임워크입니다. 씨트린개발… 07-21 6324
83     [Agate Mobile] 앱 설치 없이 서버로부터 실시간 로딩 되어 동작하는 Cloud Native App 프레임워크입니다. 김은호 08-21 10877
82  자바 초보들에게 추천하는 기초 개념을 잡을 수 있는 책들 이경용 06-19 4719
81  [팁] 갤럭시 노트3 개발자 옵션 메뉴 찾기 ^^ 이경용 11-09 8627
80  앱템플릿을 제공하는 사이트 소개합니다. 씨트린개발… 08-21 11228
79  The content of the adapter has changed but ListView ... 에러 일반적 해결법. 김병주 04-16 14275
78  간단하게 패스워드에 숫자가 혼용되었는지 처리할 수 있는 메소드입니다. 김병주 01-31 5350
77  handler를 이용해 가변시간 반복 작업하기. 김병주 11-26 7257
76  String -> HEX 김병주 11-12 4639
75  리스트 작업시에 기본적으로 알아두셔야 될점. +1 김병주 10-08 5717
74  xml 직렬처리 고범석 09-24 3760
73  주소록 추가/삭제 감지해서 앱의 db추가/삭제하기. 김병주 09-24 11328
72  확장리스트가 3뎁스 이상이 될까? 안될까? +1 김병주 08-21 6504
71  ZXing 바코드 스캔부분 크기 조절하기. 김병주 08-06 13374
70  이클립스에서 레이아웃 xml 그래픽부분이 갑자기 안보일경우. +1 김병주 07-27 5330
69  간만에 글쓰네요 이번엔 launcherShortCut (바로가기 아이콘)입니다. 김병주 07-25 10894
 1  2  3  4  5  
 
 
 
Copyright ⓒ wwwold.androidstudy.co.kr. All rights reserved.