React-native-camera限制条形码扫描区域

时间:2018-04-17 14:10:43

标签: react-native camera qr-code barcode react-native-camera

我正在使用来自react-native-camera的条形码扫描仪,目前如果我使用它并且有多个QR码密切相互叠加,我将我的相机指向一个并且它读取它上面的代码,这是屏幕外显示但在摄像机视图内。然而,如果在我要扫描的那个上面没有QR码,那么它会扫描正确的QR码,所以它似乎总是扫描摄像机视图中的顶级QR码。

以下是我的问题:有没有办法将“扫描区域”限制为与我的显示器上的相机视图相同的尺寸和区域?

<View style={styles.container}>
  <Camera
    style={styles.preview}
    onBarCodeRead={this.onBarCodeRead}
    ref={cam => this.camera = cam}
    aspect={Camera.constants.Aspect.fill}>
  </Camera>
  <Button
    style={styles.buttonStyle}
    <Text>{this.state.qrcode}</Text>
  </Button>
</View>

const styles = {
  container: {
    height: 300,
    flex: 1
  },
  preview: {
    flex: 1
  },
  buttonStyle: {
    marginTop: 20,
    marginLeft: 20,
    marginRight: 20,
    marginBottom: 20,
    alignSelf: 'center'
  }
}

版本,如果需要:

"react-native": "0.42.3",
"react-native-camera": "0.6.0",

3 个答案:

答案 0 :(得分:3)

现在,您可以使用react-native-camera限制扫描区域,只需确保导入版本3.19.2或更高版本即可。

const CAM_VIEW_HEIGHT = Dimensions.get('screen').width * 1.5;
const CAM_VIEW_WIDTH = Dimensions.get('screen').width;

const leftMargin = 100;
const topMargin = 50;
const frameWidth = 200;
const frameHeight = 250;

const scanAreaX = leftMargin / CAM_VIEW_HEIGHT;
const scanAreaY = topMargin / CAM_VIEW_WIDTH;
const scanAreaWidth = frameWidth / CAM_VIEW_HEIGHT;
const scanAreaHeight = frameHeight / CAM_VIEW_WIDTH;

class Demo extends Component {
    render() {
        return (
            <View style={styles.container}>
                <RNCamera
                    rectOfInterest={{
                        x: scanAreaX,
                        y: scanAreaY,
                        width: scanAreaWidth,
                        height: scanAreaHeight,
                    }}
                    cameraViewDimensions={{
                        width: CAM_VIEW_WIDTH,
                        height: CAM_VIEW_HEIGHT,
                    }}
                    >
                    <View
                        style={{
                        position: 'absolute',
                        top: leftMargin,
                        right: topMargin,
                        width: frameHeight,
                        height: frameWidth,
                        borderWidth: 2,
                        borderColor: 'red',
                        opacity: 0.5,
                        }}
                    />
                </RNCamera>
            </View>
        );
    }
}

答案 1 :(得分:0)

如何在<View style='your style'/ ><Camera>之间插入</Camera>

视图将是一个视口(专注于相机的视图标记)

<View style={styles.container}>
   <Camera
    style={styles.preview}
    onBarCodeRead={this.onBarCodeRead}
    ref={cam => this.camera = cam}
    aspect={Camera.constants.Aspect.fill}>

    <View style={'your style'}/>

   </Camera>
   <Button
     style={styles.buttonStyle}
      <Text>{this.state.qrcode}</Text>
   </Button>
</View>

const styles = {   容器: {     身高:300,     flex:1   },   预习: {     flex:1   },   buttonStyle:{     marginTop:20,     marginLeft:20,     marginRight:20,     marginBottom:20,     alignSelf:&#39; center&#39;   } } ```

答案 2 :(得分:0)

您还可以选择使用基于react-native-camera的ac-qrcode-rn。它同时支持ios和android,还可以扫描二维码和条形码

可以通过多种方式自定义扫描界面,这有助于使扫描用户界面看起来非常适合用户。它提供了许多道具,您可以通过它们使用自己喜欢的样式制作自己的扫描区域。