Android Zxing改变方向为肖像

Udi*_*dan 44 android zxing

在阅读了几个关于这个问题的问题和帖子后,我正在尝试旋转Zxing显示器.按照说明操作后,显示屏确实旋转,但扫描仪的矩形没有按照应有的位置放置(如附图所示).

这就是我所做的:

  1. 在CameraConfigurationManager中:

    camera.setDisplayOrientation(90);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在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;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在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;
    
    Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Udi*_*dan 30

在经历了很多挣扎之后,我发现了问题,我希望它能在将来帮助某个人.

initFromCameraParameters方法中CameraConfigurationManager,假设扫描是ALWAYS in landscape mode,并因此修复时width < height.如果您按照问题中的步骤删除此检查,它可以正常工作.

  • @ROb:Okies .......朋友..第二点已经在byte [] rotateData ....的解码方法中添加 (3认同)

Rob*_*rto 14

谢谢您的回答!!它确实对我有所帮助,我注意到的一件事是至少在zxing 2.1上你需要将"rotatingData"传递给buildLuminanceSource而不仅仅是"data",这一行最终会像这样:

PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(rotatedData, width, height);
Run Code Online (Sandbox Code Playgroud)

希望这有助于其他人!


Anu*_*nup 9

至于zxing库:2.2.0对方向变化的支持是固有的

在清单中添加/编辑以下内容:

<activity
    android:name="com.journeyapps.barcodescanner.CaptureActivity"
    android:screenOrientation="fullSensor"
    tools:replace="screenOrientation" />
Run Code Online (Sandbox Code Playgroud)

在致电扫描仪时设置其他财产:

IntentIntegrator integrator = new IntentIntegrator(this);

//allows portrait/landscape mode
integrator.setOrientationLocked(false);//"additional property"
integrator.initiateScan();
Run Code Online (Sandbox Code Playgroud)

参考链接:https://github.com/journeyapps/zxing-android-embedded#changing-the-orientation


You*_*shi 8

好吧,我在ProjectLibrary(xzing项目)上进行了一些小改动,并且能够将方向景观改为肖像

setDesiredCameraParameters method of class CameraConfigurationManager

camera.setDisplayOrientation(90);

..在我原始项目的AndroidManifest.xml文件中.我设置screenOrientation = portrait它并且它在我的ICS 4.0.3上工作正常

   <activity
        android:name="com.google.zxing.client.android.CaptureActivity"
        android:configChanges="orientation|keyboardHidden"
        android:exported="false"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:windowSoftInputMode="stateAlwaysHidden" >
        <intent-filter>
            <action android:name="com.phonegap.plugins.barcodescanner.SCAN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity> 
Run Code Online (Sandbox Code Playgroud)


Day*_*are 5

  1. CameraConfigurationManager:

    camera.setDisplayOrientation(90);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 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;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 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;
    
    Run Code Online (Sandbox Code Playgroud)
  4. CameraConfigurationManager:

    if    (width > height) {
      Log.i(TAG, "Display reports portrait orientation; assuming this is incorrect");
      int temp = width;
      width = height;
      height = temp;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 更改android:screenOrientation="portrait"CaptureActivity清单中.