0

我正在尝试使用索尼智能眼镜检测二维码

当我使用时,CAMERA_MODE_STILL我可以捕获图片并检测其中的条形码工作正常!

现在当我将录制模式更改为CAMERA_MODE_JPG_STREAM_LOW_RATE

我必须将分辨率设置为 CAMERA_RESOLUTION_QVGA否则setCameraMode会抛出“分辨率具有非法值”,因为在SmartEyeglassControlUtilsStream 支持中仅包含QVGA

private static final List<Integer> CAMERA_JPEG_STREAM_SUPPORT_RESOLUTION = Arrays.asList(
            SmartEyeglassControl.Intents.CAMERA_RESOLUTION_QVGA
);

我已经尝试过修改它,但是相机不再工作了。

那么我如何检测二维码,而无需实际拍摄照片并将其发送到 zxing 库?有没有办法提高质量并仍然使用流?还是我必须使用静止模式并实际拍摄照片才能使用 3M 分辨率?

4

1 回答 1

0

这么晚才回复很抱歉。您应该能够使用 CAMERA_MODE_JPG_STREAM_LOW_RATE 选项并逐帧捕获所需的图像并将它们发送到 zing。如果您从 SampleCameraControl 示例开始并打开“SampleCameraControl.java”文件,那么您可以在 SampleCameraControl 构造函数中修改监听器,如下所示:

    // Initialize listener for camera events
    SmartEyeglassEventListener listener = new SmartEyeglassEventListener() {
        // When camera operation has succeeded
        // handle result according to current recording mode
        @Override
        public void onCameraReceived(final CameraEvent event) {

            /*
             * Turn over full control of the streamed video to the barcode scanner library
             * */
          byte[] bitmapdata = event.getData();

          //Convert the camera data to a bitmap
          Bitmap originalBitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length);

          //Create a blank bitmap canvas so we can draw text
          Bitmap mainBitMap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_8888);      
          Canvas mainCanvas = new Canvas(mainBitMap);

          //Add the main bitmap to the new blank canvas
          mainCanvas.drawBitmap(originalBitmap, 0, 0, new Paint());

          mainCanvas = drawScanText(mainCanvas, "Scan:null");

          //Scan the barcode with Zxing
          scanBarcodeTask = new scanBarcodeTask().execute(originalBitmap);

        }
        // Called when camera operation has failed
        // We just log the error
        @Override
        public void onCameraErrorReceived(final int error) {
            Log.d(Constants.LOG_TAG, "onCameraErrorReceived: " + error);
        }
        // When camera is set to record image to a file,
        // log the operation and clean up
        @Override
        public void onCameraReceivedFile(final String filePath) {
            Log.d(Constants.LOG_TAG, "onCameraReceivedFile: " + filePath);
            mode.closeCamera(utils);
        }
    };
于 2017-07-25T20:59:21.870 回答