Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 二維碼掃描(橫屏、豎屏、解決豎屏後拉伸問題、美化掃描框)

二維碼掃描(橫屏、豎屏、解決豎屏後拉伸問題、美化掃描框)

編輯:關於Android編程

是根據zxing的源碼進行簡化的,不過只支持橫屏。 其實支持豎屏也挺簡單的:【http://stackoverflow.com/questions/16252791/zxing-camera-in-portrait-mode-on-android】 Step 1: Add following lines to rotate data before buildLuminanceSource(..) in decode(byte[] data, int width, int height)   DecodeHandler.java:   byte[] rotatedData = new byte[data.length]; for (int y = 0; y < height; y++) {     for (int x = 0; x < width; x++)         rotatedData[x * height + height - y - 1] = data[x + y * width]; } int tmp = width; width = height; height = tmp;   PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(rotatedData, width, height); Step 2: Modify getFramingRectInPreview().   CameraManager.java   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; Step 3: Disable the check for Landscape Mode in initFromCameraParameters(...)   CameraConfigurationManager.java   //remove the following if (width < height) {   Log.i(TAG, "Display reports portrait orientation; assuming this is incorrect");   int temp = width;   width = height;   height = temp; } Step 4: Add following line to rotate camera insetDesiredCameraParameters(...)   CameraConfigurationManager.java   camera.setDisplayOrientation(90); Step 5: Do not forget to set orientation of activity to portrait. I.e: manifest   但是這樣之後,會出現拉伸的問題,解決方法如下: 更改CameraConfigurationManager.java文件   在 Log.d(TAG, "Screen resolution: " + screenResolution);這句之後增加 Point screenResolutionForCamera = new Point();         screenResolutionForCamera.x = screenResolution.x;         screenResolutionForCamera.y = screenResolution.y;         // preview size is always something like 480*320, other 320*480         if (screenResolution.x < screenResolution.y) {         screenResolutionForCamera.x = screenResolution.y;         screenResolutionForCamera.y = screenResolution.x;         } 再更改cameraResolution = getCameraResolution(parameters, screenResolution);為cameraResolution = getCameraResolution(parameters, screenResolutionForCamera); 如果想美化一下取景框,可以參看代碼:https://code.csdn.net/snippets/64838
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved