zxing 에서 가로모드로만 되어 있는 것을 세로 모드로 바꾸어 보겠습니다.
zxing 버전은 2012년 11월 20일 ZxingDemo versionCode=87 입니다.
zxing : https://github.com/zxing/zxing
많은 블로그에서 가져와서 테스트 해본 결과 입니다.
- AndroidManifest.xml 에서 android:screenOrientation="portrait" 로 설정
- CameraConfigurationManager.java
- void setDesiredCameraParameters(Camera camera, boolean safeMode) 함수에서 제일 아래 부분의
camera.setParameters(parameters); 전에 camera.setDisplayOrientation(90); 를 추가 합니다. - CameraManager.java 파일에서 getFramingRectInPreview() 에 아래와 같은 코드를 추가 합니다.
- DecodeHandler.java 파일에서 private void decode(byte[] data, int width, int height) 함수에 아래와 같은 코드를 추가 합니다.
void initFromCameraParameters(Camera camera) { Camera.Parameters parameters = camera.getParameters(); WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = manager.getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); // We're landscape-only, and have apparently seen issues with display thinking it's portrait // when waking from sleep. If it's not landscape, assume it's mistaken and reverse them: // 아래 if 문을 주석 처리를 합니다. // if (width < height) { // Log.i(TAG, "Display reports portrait orientation; assuming this is incorrect"); // int temp = width; // width = height; // height = temp; // } screenResolution = new Point(width, height); Log.i(TAG, "Screen resolution: " + screenResolution); cameraResolution = findBestPreviewSizeValue(parameters, screenResolution); Log.i(TAG, "Camera resolution: " + cameraResolution); }
rect.left = rect.left * cameraResolution.y / screenResolution.x; rect.right = rect.right * cameraResolution.y / screenResolution.x; rect.top = rect.top * cameraResolution.x / screenResolution.y; rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;
byte[] portraitData = new byte[data.length]; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { portraitData[x * height + height - y - 1] = data[x + y * width]; } } int tmp = width; width = height; height = tmp; // 회전한 데이터를 buildLuminanceSource 에서 사용 해야 함 PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(portraitData, width, height);
'Programs > Android' 카테고리의 다른 글
Content Observer (0) | 2013.02.27 |
---|---|
안드로이드 멀티 해상도 지원 (2) | 2012.12.04 |
안드로이드에서 Back Key 막는 방법 (2) | 2012.11.09 |
Lock 화면 위로 Activity 실행 시키는 방법 (7) | 2012.08.09 |
WebView 에서 스크롤 영역 표시 되는 문제 (0) | 2012.08.08 |